A повышающий запрос хорошо подходит для этой цели:
Пример данных
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
, которое представляет собой корректировку порядка значимости, должно дать вам то, что вы ищете.