Диверсифицированные результаты поиска 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? сколько?) и др.