如何使用Go构建Elasticsearch查询?

时间:2017-08-01 22:47:40

标签: elasticsearch go elasticsearch-plugin elasticsearch-query

我正在使用olivere的Elasticsearch库进行Go - 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
}

如何修复我的搜索查询?

1 个答案:

答案 0 :(得分:0)

你的go脚本很好,它的工作原理。问题在于查询本身。这是您针对elasticsearch执行的操作。直接尝试使用elasticsearch(通过Sense,Kibana或类似工具)并检查它是否返回您的期望:

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

解决方案:

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