Sorting Elasticsearch对多个索引的结果进行排序,以便一个索引具有优先级
我有6个网站,让我们称它们为A、B、C、D、E&M。M是主网站,因为从它你可以搜索其他网站的内容,我很容易做到这一点,在搜索查询中使用逗号分隔的所有索引 然而,我现在有一个新的要求,从每个网站,你可以搜索所有网站(容易做,应用解决方案从M到所有),但优先考虑从当前网站的结果 所以,如果我从C搜索,第一个结果应该来自C,然后是基于分数的其他结果 现在,我如何给出一个索引优先于其他索引的结果?A很好地满足了这一目的: 样本数据 查询 回应 笔记Sorting Elasticsearch对多个索引的结果进行排序,以便一个索引具有优先级,sorting,elasticsearch,indexing,Sorting,elasticsearch,Indexing,我有6个网站,让我们称它们为A、B、C、D、E&M。M是主网站,因为从它你可以搜索其他网站的内容,我很容易做到这一点,在搜索查询中使用逗号分隔的所有索引 然而,我现在有一个新的要求,从每个网站,你可以搜索所有网站(容易做,应用解决方案从M到所有),但优先考虑从当前网站的结果 所以,如果我从C搜索,第一个结果应该来自C,然后是基于分数的其他结果 现在,我如何给出一个索引优先于其他索引的结果?A很好地满足了这一目的: 样本数据 查询 回应 笔记 你使负增长越小,那么“积极指数”的结果就越有可能胜过其
负值\u boost
设置为0
,您将保证“活动站点”结果首先排序,但您将放弃所有其他站点的所有分数,因此剩余的排序将是任意的我认为像
negative\u boost:0.1
,这是一个数量级的相关性调整,应该可以满足您的需求。现在有没有办法限制结果的数量?因为在没有增加搜索量的情况下,我会得到600个搜索结果,现在我得到了1800多个搜索结果,我认为这已经接近了文档的总量,就像它不再有“分界点”一样。即使文档中没有关键字,它也会列出文档。如文档所述(以及我在ES 6.6和7.1中所测试的),增强查询应该只包括与肯定
查询子句匹配的结果。您确定结果中没有您搜索的任何关键字吗?关于你在该查询中使用的肯定
子句,你还有什么可以分享的吗?当然没有,在这个链接上,你可以看到我的未绑定然后增强的查询:这里是最后一个结果,准确地说是第1660位,它甚至有1.5分的分数!!!它只是一个被索引的空文档样本。然而,当搜索“dna”时,它会出现。。。问题不是boosting查询,而是您构建主bool查询的方式。如果同时包含必须
子句和应该
子句,则最小值应_匹配
有效默认为0
(即,必须
子句的存在意味着您不再需要至少1个应该
子句来命中)。我建议做两个改变:(#1)添加一个明确的最小匹配:1
到你的顶级bool和(#2)将你的必须切换到过滤器
(日期范围似乎对评分/相关性没有帮助,过滤器更便宜):
POST /_bulk
{"index":{"_index":"a"}}
{"message":"First website"}
{"index":{"_index":"b"}}
{"message":"Second website"}
{"index":{"_index":"c"}}
{"message":"Third website"}
{"index":{"_index":"d"}}
{"message":"Something irrelevant"}
POST /a,b,c,d/_search
{
"query": {
"boosting": {
"positive": {
"match": {
"message": "website"
}
},
"negative": {
"terms": {
"_index": ["b", "c", "d"]
}
},
"negative_boost": 0.2
}
}
}
{
...
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 0.2876821,
"hits" : [
{
"_index" : "a",
"_type" : "_doc",
"_id" : "sx-DkWsBHWmGEbsYwViS",
"_score" : 0.2876821,
"_source" : {
"message" : "First website"
}
},
{
"_index" : "b",
"_type" : "_doc",
"_id" : "tB-DkWsBHWmGEbsYwViS",
"_score" : 0.05753642,
"_source" : {
"message" : "Second website"
}
},
{
"_index" : "c",
"_type" : "_doc",
"_id" : "tR-DkWsBHWmGEbsYwViS",
"_score" : 0.05753642,
"_source" : {
"message" : "Third website"
}
}
]
}
}