Диверсифицированные результаты поиска Elasticsearch
Я сделал сложный запрос, используя популярность, чтобы улучшить результаты документов социальных сетей, используя Elasticsearch.
Запрос работает очень хорошо, и лучшие результаты всегда сосредоточены на запросе и с интересными элементами.
Однако у него есть проблема, для некоторых запросов первые результаты все от одного и того же пользователя.
Я хотел бы downscore документ, если тот же пользователь был извлечен на более высоком документе. Таким образом, я ожидаю большей диверсификации результатов.
Обратите внимание, что я не хочу, чтобы они удалялись, так как в некоторых случаях может оказаться интересным найти больше документов одного и того же пользователя, но я бы хотел, чтобы они находились в более низком положении.
Может ли кто-нибудь предложить способ заставить его работать?
Как было предложено в некоторых комментариях, я обновляю (упрощенную версию) моего запроса:
query = {"function_score": {
"functions": [
{"gauss": {"createdAt":
{"origin": "now", "scale": "30d", "offset": "7d", "decay" :0.9 }
}},
{"gauss": {"shares.last.twitter_retweets_log":
{"origin": 4.52, "scale": 2.61, "decay" : 0.9}
}},
],
"query": {"bool":{"must":[
{"exists":{"field": "images"}},
{"multi_match":{"query": "foo boo", fields:["text", "link.title"]}}
]}},
"score_mode": "multiply"
}};
P.S: некоторые документы, которые могут быть интересными, поскольку они говорят о разнообразии, но я не уверен, как подать заявку:
Ответы
Ответ 1
Вы можете связать сэмплер с агрегацией top_hits
для получения разнообразных результатов.
{
"query": {
"match": {
"query": "iphone"
}
},
"size":0,
"aggs": {
"sample": {
"sampler": {
"shard_size": 200,
"field" : "user.id"
},
"aggs": {
"diversifiedMatches": {
"top_hits": {
"size":10
}
}
}
}
}
}
Есть некоторые предостережения, например:
1) Дедупликация не является глобальным
2) Выбор поля диверсификации должен быть полем с одним значением
3) Нет поддержки разбивки на страницы
4) Нет поддержки для сортировки на чем угодно, кроме балла
Решение вышеперечисленных проблем будет затруднено и потребует дорогостоящей/сложной координации внутри страны, а также больше рекомендаций от клиента о том, когда и где можно повторить "повторяющиеся" результаты (стр. 2? стр. 3? сколько?) и др.