我使用弹性搜索版本2.x。我有两份记录被编入索引:
当我试图搜索短语“瓷砖墙浴室”理想情况下,第二次应该首先出现,因为这是完全匹配的,第一次将出现因为所有的三个词匹配(瓷砖,墙壁和浴室)。
我根据列在查询中进行排序。下面是我的弹性搜索查询:
{
"query" : {
"filtered" : {
"query" : {
"query_string": {
"query": "*tile wall bathroom*",
"fields": [
"nickname",
"comments",
"category_name",
"subcategory_name",
"document_name",
"web_links",
"document_extension",
"property_name",
"document_content"
],
"analyze_wildcard": true
}
},
"filter" : {
"and" : [
{"term" : {"property_id" : "6"}}
]
}
}
},
"size": 10,
"sort": ["nickname", "comments", "web_links", "document_name"]
}如需参考,请查找附件中的图片。

提前谢谢!
发布于 2017-07-07 14:38:32
所有的三个术语都被击中了,因为这两个文档字段都由“卫浴”、“瓷砖”和“墙”组成。因此,将两个文档检索为hits是很常见的。正如您所建议的,一般来说,当按分数排序时,第一个文档的排名应该高于第二个文档。
因为您的第一个排序字段是“昵称”-field,所以您得到了这个结果集,首先所有文档都在其“昵称”-fields上按字母顺序排序(“卫浴墙瓷砖”中的b先于t“瓷砖墙浴室”等)。这不包括在搜索请求中按相关性评分排序。您可以使用“昵称”作为次要排序参数,而使用"_score"-field作为第一个参数。
您还可以使用Elasticsearch-解释功能检查查询。
干杯,多明尼克
编辑:请尝试对Elasticsearch-解释-API运行您的查询,这使您能够理解结果是如何计算的。此外,您可以对您的数据运行匹配查询,以查看您的结果是否与"query_string“的用法相比有所提高。在此,您还可以省略排序参数,以便只按其相关性评分对结果进行排序。
{
"query": {
"match": {
"nickname": "tile wall bathroom"
},
"size": 10,
"sort": ["_score", "nickname", "comments", "web_links", "document_name"]
}
}发布于 2021-07-30 16:15:19
您应该使用带状疱疹。您的用例是专门为其设计的。
https://stackoverflow.com/questions/44971679
复制相似问题