我正在尝试使用以下查询重新调整结果:
POST /archive/item/_search
{
"query": {
"multi_match": {
"fields": ["title", "description"],
"query": "1 złoty",
"operator": "and"
}
},
"rescore": {
"window_size": 50,
"query": {
"rescore_query": {
"multi_match": {
"type": "phrase",
"fields": ["title", "description"],
"query": "1 złoty",
"slop": 10
}
},
"query_weight": 0,
"rescore_query_weight": 1
}
}
}
我这样做是因为我想靠接近得分。 另外,我想忽略源字段长度对分数的影响。 我这样做了吗?如果没有,这里的最佳做法是什么?
第二个问题。为什么还需要window_size
?
我不想要最好的结果。
主查询atcs就像一个过滤器,所以它返回的所有结果都是相关的。
我认为像"window_size": "all"
这样的东西是完美的,但我在文档中找不到任何东西。
答案 0 :(得分:1)
要回答你的第二个问题,需要它的原因是因为它只是为了获得最佳结果。基本上这是一个成本问题 - 假设二级算法更昂贵,因此它只是设计为在最佳结果上运行。这里有更多关于此的讨论:
https://github.com/elasticsearch/elasticsearch/issues/2640
在这里:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-rescore.html
我个人认为“全部”选项是一个好主意,也许你应该在github上打开一个问题?
答案 1 :(得分:0)
如果你想用邻近匹配得分,那么其他过滤器返回的所有结果应该是:
{
"query": {
"filtered" : {
"query" : {
"multi_match": {
"type": "phrase",
"fields": ["title", "description"],
"query": "1 złoty",
"slop": 10
}
},
"filter" : {
"query": {
"multi_match": {
"fields": ["title", "description"],
"query": "1 złoty",
"operator": "and"
}
}
}
}
}
}
根据this,过滤器在查询之前运行,因此性能也不应该很差。你还得分两次,因为过滤器不能计算分数。另一个优点是可以缓存过滤器,这应该可以显着加快速度。
请记住,我只进行了短测试,主要关注语法而不是结果。您可能需要仔细检查它。