我有6个网站,可以将它们称为A,B,C,D,E和M。M是主网站,因为您可以从中搜索其他网站的内容,我通过使用所有索引轻松完成了此操作在搜索查询中用逗号分隔。
但是我现在有一个新的要求,即从每个网站上您都可以搜索所有网站(操作简便,将M的解决方案应用于所有网站),但是优先考虑当前网站的结果。
因此,如果我从C中进行搜索,则首先应从C中获得结果,然后再根据得分从其他结果中获得结果。
现在,我如何赋予一个索引优先于其余索引的结果?
答案 0 :(得分:1)
boosting query很好地达到了这个目的:
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"
}
}
]
}
}
negative_boost
越小,“活动索引”结果胜过其他索引的可能性就越大negative_boost
设置为0
,则可以保证“活动站点”的结果排在第一位,但是您将舍弃所有其他站点的所有分数,因此剩下的将是任意的。我认为negative_boost: 0.1
之类的东西对相关性进行了幅度调整,应该能为您提供所需的东西。