【问题标题】:How to use golang bleve search results?如何使用 golang bleve 搜索结果?
【发布时间】:2018-05-28 20:19:16
【问题描述】:

我是 Go 和 Bleve 的新手(对不起,如果我问的是琐碎的事情……)。这个搜索引擎看起来很不错,但是在处理我的搜索结果时我卡住了。

假设我们有一个结构:

type Person struct {
    Name string `json:"name"`
    Bio  string `json:"bio"`
}

现在,我们从数据库中提取数据(使用 sqlx lib):

rows := []Person{}
db.Select(&rows, "SELECT * FROM person")

...并将其编入索引:

index.Index, err = bleve.Open("index.bleve")

batch := index.Index.NewBatch()

i := 0
for _, row := range rows {
    rowId := fmt.Sprintf("%T_%d", row, row.ID)
    batch.Index(rowId, row)

    i++
    if i > 100 {
        index.Index.Batch(batch)
        i = 0
    }
}

现在我们已经创建了索引。效果很好。

使用bleve command line utility,它可以正确返回数据:

bleve query index.bleve doe

3 matches, showing 1 through 3, took 27.767838ms
    1. Person_68402 (0.252219)
    Name
        Doe
    Bio
        My name is John Doe!

    2. ...

在这里我们看到 bleve 已经存储了 NameBio 字段。

现在我想从我的代码中访问它!

query := bleve.NewMatchAllQuery()
searchRequest := bleve.NewSearchRequest(query)
searchResults, _ := index.Index.Search(searchRequest)

fmt.Println(searchResults[0].ID) // <- This works

但我不只是想要ID,然后查询数据库以获取其余日期。致avoid hitting database,我希望能够这样做:

fmt.Println(searchResults[0].Bio) // <- This doesn't work :(

你能帮忙吗?

【问题讨论】:

    标签: go full-text-search bleve


    【解决方案1】:

    搜索结果中的每个匹配项都是DocumentMatch。您可以在文档中看到DocumentMatchFields,这是一个map[string]interface{},可以通过以下方式访问:

    searchResults.Hits[0].Fields["Bio"].(string)
    

    默认情况下,Bleve 不会在结果中包含文档的字段。您必须提供您希望返回给SearchRequest.Fields 的字段列表(index.Search 的参数)。或者,您可以设置

    searchRequest.Fields = []string{"*"}
    

    返回所有字段。

    【讨论】:

    • 非常感谢 Moshe,它就像一个魅力!字段位于 Hits 中,因此我必须执行 searchResults.Hits[0].Fields["Bio"] 才能得到它。
    • @user650108 不错 ;-)
    • 「也可以通过[]string{"*"}返回所有字段。」,传到哪里?
    • 仅供参考。将 Hits ID 传递给 index.Document 将获取字段,如果设置索引 Internal,使用 index.GetInternal 和 Hits ID 将获取原始结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多