Оценка затухания Elasticsearch на основе появления

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

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

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

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


person tsturzl    schedule 08.12.2014    source источник


Ответы (3)


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

person mindas    schedule 15.12.2014
comment
Если вы имеете в виду ведра, вы не можете разбить ведра на страницы. Думать об этом. Я могу создать корзину для каждого автора, а затем получить по одному обращению для каждого автора. Допустим, есть 90 авторов (и это значение меняется), этот запрос каждый раз будет давать мне 90 результатов в 90 разных сегментах. Сами сегменты не могут быть разбиты на страницы. Так что я всегда буду получать столько авторов, сколько стоит постов на каждой странице. Каждое ведро само по себе доступно для страниц, однако группа ведер - нет. Итак, я могу установить from и size для ведра, но не могу сделать это для набора ведер. - person tsturzl; 16.12.2014

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

Дополнительную информацию см. здесь

person tsturzl    schedule 17.12.2014

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

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

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

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

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

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

person Martin Braun    schedule 13.12.2014
comment
тем не менее, я был бы очень рад, если бы вы узнали способ и разместили его здесь :) - person Martin Braun; 14.12.2014
comment
и кстати. в моем веб-приложении я закончил предварительную сортировку в своем коде Java, а затем вручную установил порядок сортировки для запроса. Поскольку вы используете ElasticSearch, а не Lucene/HSearch, к сожалению, это не сработает. - person Martin Braun; 14.12.2014
comment
это был мой вопрос в тот день: stackoverflow.com/questions/21528491/ - person Martin Braun; 14.12.2014