如何使用golang bleve搜索结果?

如何使用golang bleve搜索结果?,go,full-text-search,bleve,Go,Full Text Search,Bleve,我是新来的(如果我问的是琐碎的事情,很抱歉…)。这个搜索引擎看起来很不错,但是当我处理我的搜索结果时,我被卡住了 假设我们有一个结构: type Person struct { Name string `json:"name"` Bio string `json:"bio"` } 现在,我们从数据库中提取数据(使用sqlx lib): …并为其编制索引: index.Index, err = bleve.Open("index.bleve") batch := index.

我是新来的(如果我问的是琐碎的事情,很抱歉…)。这个搜索引擎看起来很不错,但是当我处理我的搜索结果时,我被卡住了

假设我们有一个结构:

type Person struct {
    Name string `json:"name"`
    Bio  string `json:"bio"`
}
现在,我们从数据库中提取数据(使用sqlx lib):

…并为其编制索引:

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 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存储了
Name
Bio
字段

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

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

fmt.Println(searchResults[0].ID) // <- This works
query:=bleve.NewMatchAllQuery()
searchRequest:=bleve.NewSearchRequest(查询)
searchResults,\:=index.index.Search(searchRequest)

fmt.Println(searchResults[0].ID)//搜索结果中的每一次命中都是一个错误。您可以在文档中看到,
DocumentMatch
具有
字段
,这是一个
map[string]接口{}
,可按如下方式访问:

searchResults.Hits[0].Fields["Bio"].(string)
默认情况下,Bleve不会在结果中包含文档的字段。必须提供要返回到
SearchRequest.fields
(index.Search
的参数)的字段列表。或者,您可以设置

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

返回所有字段。

非常感谢Moshe,它非常有效!字段位于Hits中,因此我必须执行搜索结果。Hits[0]。字段[“Bio”]才能获得它。@user650108很好捕获;-)「或者,您可以传递[]字符串{“*”}以返回所有字段。」传递到何处?仅供注意。将Hits ID传递给index.Document将获取字段,如果设置了内部索引,则使用index.GetInternal和Hits ID将获取原始结构。
searchResults.Hits[0].Fields["Bio"].(string)
searchRequest.Fields = []string{"*"}