0

我正在为 Go 使用 Olivere 的 Elasticsearch 库 - https://github.com/olivere/elastic

我无法正确构建搜索查询,它一直返回 0 次点击。

termQuery := elasticClient.NewTermQuery("hash", "hashedID")
fmt.Println(termQuery)
searchResult, err := qs.client.Search().Index("someIndex").
    Type("node").
    Query(termQuery).
    Pretty(true).
    Do(ctx)
if err != nil {
    return nil
}

searchResult.Hits.TotalHits即使有数据,也给出 0 次点击。数据在我的本地机器上运行的 Elasticsearch 服务器中,如果我运行 REST API 调用,我可以查看它:

{
   "_index": "someIndex",
   "_type": "node",
   "_id": "hashedID",
   "_score": 1,
   "_source": {
   "node": "test",
   "hash": "hashedID",
   "active": true
}

如何修复我的搜索查询?

4

1 回答 1

0

您的 go 脚本很好,并且可以正常工作。问题在于查询本身。这就是您对弹性搜索执行的操作。直接针对 elasticsearch(通过 Sense、Kibana 或类似工具)尝试它,并检查它是否返回您期望的结果:

POST someIndex/node/_search
{
    "query": {
        "term": {
           "hash": "hashedID"
        }
    }
}

解决方案:

我怀疑散列是类型text(使用elasticsearch 5)。然后,您需要查询hash.keyword一个术语查询。

于 2017-08-02T08:59:43.610 回答