2014-12-08 3 views
6

Я пытаюсь найти способ предотвратить появление нескольких сообщений в результатах поиска, которые принадлежат одному автору. До сих пор я пробовал случайный подсчет очков, что позволяет мне поддерживать разбивку на страницы. Тем не менее, у меня все еще может быть до 4 тех же авторов на данной странице из 10 результатов.Оценка распада Elasticsearch на основе возникновения

Есть ли способ зачислить документ, исходя из того, сколько раз определенное поле возникает в результирующем наборе? Насколько мне известно, вы не можете сохранить переменную или объект в сценарии подсчета очков.

Я рассмотрел несколько способов достижения этого, но многие из них имеют немало минусов. Например, удаление дубликатов и повторное вызов для получения нового набора результатов, которые исключены из списка авторов. Однако это может также вернуть несколько из тех же авторов. Поэтому я оставляю запрос один за другим, чтобы заменить дубликатов авторов в результирующем наборе, и это разбивает глубокую разбивку на страницы, потому что в конечном итоге другой результирующий набор, который используется для замены дубликатов, заканчивается страницами перед стандартным поиском. Я также попробовал агрегацию, которая не работает на странице.

Есть ли какая-либо функциональность для распространения или вычитания оценки документа на основе того, сколько раз происходит документ одного и того же автора (или поля)?

ответ

0

Вы не можете диверсифицировать сортировку elasticsearch. Вы можете только random_seed зачислить документы и надеяться на лучшее. Вы можете использовать что-то вроде агрегатора главных хитов, чтобы агрегировать ведра на автора, но вы не можете разбивать на группы группу ведер. Поэтому ломать разбивку на страницы.

See here for more information

-1

РЕДАКТИРОВАТЬ: перед тем, как вы передадите этот ответ только потому, что это связано с Люцене, а не с реальным ответом на вопрос: 1. ElasticSearch основан на Lucene 2. То, что OP хочет сделать, действительно сложно сделать, и я был просто пытаясь помочь ...

Вы можете попробовать поиграть с распадом здесь:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/query-dsl-function-score-query.html

Однако это не позволяет вернуться ссылок на предыдущие хиты текущего запроса (как техника должна соответствовать вашему варианту использования)

Я столкнулся с аналогичной проблемой для вас в webapp, в которой мы использовали Lucene/Hibernate-Search, и я действительно не получил удовлетворительного результата, и это все еще беспокоит меня.

Я думаю, что лучше всего попытаться получить хороший пользовательский опыт, пытаясь реализовать заказ по-другому.

+0

однако, я был бы очень рад, если вы обнаружили, как и разместил его здесь :) –

+0

и кстати. в моем webapp я закончил работу над своим кодом Java, а затем вручную установил порядок сортировки. Поскольку вы используете ElasticSearch, а не Lucene/HSearch, это не сработает. –

+0

Это был мой вопрос в тот же день: http://stackoverflow.com/questions/21528491/how-can-i-sort-in-a-round-robin-fashion-in-lucene –

0

Любые причины, по которым вы не можете использовать grouping? Просто укажите группу и определите порядок для группы.

+0

Если вы имеете в виду ведра, вы не можете разбивать ведра. Думать об этом. Я могу создать ведро для каждого автора, тогда я могу захватить один удар на автора. Допустим, что 90 авторов (и это значение меняется), этот запрос даст мне 90 результатов каждый раз, в 90 разных ведрах. Ведра сами не могут быть разбиты на страницы. Поэтому я всегда получаю, однако, количество авторов на каждой странице. Каждое ведро само по себе является страничным, однако группы ведер нет. Поэтому я могу установить 'from' и' size' для ведра, но я не могу сделать это на наборе ковшей. – tsturzl

Смежные вопросы