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