我是第一次了解 Elasticsearch,并花了大约一天的时间来研究它。我们已经广泛使用 Lucene,并希望开始使用 ES。我正在寻找我们目前拥有的替代数据结构。
如果我运行 *match_all* 查询,这就是我现在得到的结果。我对这个结构很满意。
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 22,
"max_score": 1,
"hits": [
{
"_index": "integration-test-static",
"_type": "sport",
"_id": "4d38e07b-f3d3-4af2-9221-60450b18264a",
"_score": 1,
"_source": {
"Descriptions": [
{
"FeedSource": "dde58b3b-145b-4864-9f7c-43c64c2fe815",
"Value": "Football"
},
{
"FeedSource": "e4b9ad44-00d7-4216-adf5-3a37eafc4c93",
"Value": "Football"
}
],
"Synonyms": [
"Football"
]
}
}
]
}
}
我不明白的是如何编写一个查询来通过搜索同义词“Football”来拉回此文档。看起来应该很容易!
读完这篇文章后我得到了这种方法:http://gibrown.wordpress.com/2013/01/24/elasticsearch-five-things-i-was-doing-wrong/ 他提到在数组中存储多个字段。我意识到我的示例没有多个字段,但我们肯定会寻找可以满足它们的解决方案。
使用过滤器、bool things、term this 和 terms that 尝试了各种不同的查询,但没有返回。
最佳答案
您的搜索和映射是什么样的?
如果您让 Elasticsearch 生成映射,它将使用标准分析器来小写文本(并删除停用词)。
因此,Football
实际上将被索引为 football
。 term
系列查询/过滤器不进行文本分析,因此 term:Football
将查找未建立索引的 Football
。 match
系列查询确实如此。
这是一个非常常见的问题,在我关于 Troubleshooting Elasticsearch searches, for Beginners 的文章中进行了相当广泛的讨论。 ,值得浏览一下。文本分析是搜索工作中非常重要的一部分,因此有 some more articles about也是如此。
关于arrays - Elasticsearch 数组查询/过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21913853/