Как я могу объединить рейтинги из нескольких запросов Elasticsearch? - PullRequest
0 голосов
/ 18 мая 2018

Я хотел бы объединить рейтинги, полученные из запросов к отдельным полям индекса Elasticsearch, чтобы получить «составной» рейтинг.

В качестве (глупого) примера «подбора соответствия», предположим, что я хотел получитьнаилучшие результаты поиска по индексу людей, в которых содержится их любимая музыка, еда, спорт.

Отдельные запросы могут быть, например,

"query": { "match" : { "music" : "indie classical metal" } }

, которые приведут меня к ранжированным результатам:

  1. Алиса, 2. Боб, 3. Чарли;

"query": { "match" : { "foods" : "falafel strawberries coffee" } }

, уступающий

  1. Алиса, 2. Чарли,3. Боб;

и

"query": { "match" : { "sports" : "basketball ski" } }

, уступающий

  1. Чарли, 2. Алиса, 3. Боб.

Теперь я хотел бы получить «совокупный» рейтинг на основе приведенных выше рейтингов, например, используя методы голосования, перечисленные в Как объединить коллекцию упорядоченных предпочтений .

ПокаЧтобы добиться чего-то в этом направлении, я использовал синтаксис для составных запросов, таких как

"query": {
   "bool": {
        "should": [
                { "match" : { "music" : "indie classical metal" } },
                { "match" : { "foods" : "falafel strawberries coffee" } },
                { "match" : { "sports" : "basketball ski" } },
        ]
    }
 }

или

"query": {
   "dis_max": {
        "queries": [
                { "match" : { "music" : "indie classical metal" } },
                { "match" : { "foods" : "falafel strawberries coffee" } },
                { "match" : { "sports" : "basketball ski" } },
        ]
    }
 }

buт (AFAIK) они не делают то, что я ищу (который не использует оценки, но ранги).Я понимаю, что довольно просто пост-обработать ранжирование (например, используяasticsearch-py и затем несколько строк Python), но возможно ли сделать вышеперечисленное непосредственно с помощью запроса Elasticsearch?

(бонусный вопрос:Не могли бы вы предложить альтернативные стратегии для объединения рейтингов из нескольких полей, помимо bool + should и dis_max, которые я мог бы попробовать?)

1 Ответ

0 голосов
/ 20 мая 2018

Посмотрите на Функция Score Query - она ​​должна позволить вам делать то, что вы ищете.Но имейте в виду, что это может привести к замедлению выполнения запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...