Elasticsearch в - высшее забив при высокой частоте перспективе



У меня есть 2 документа, и я ищу ключевое слово "Twitter". Предположим, что оба документа являются записями в блоге С полем "теги".



Документ а имеет только 1 термин в поле "теги", и это"Twitter".
Документ B содержит 100 терминов в поле "теги", но 3 из них-это "Twitter".



Эластичный поиск дает более высокую оценку документу A, даже если документ B имеет более высокую частоту. Но счет "разбавлен", потому что в нем больше терминов. Как я могу дать документу B более высокий балл, так как он имеет ли более высокую частоту поисковый запрос?



Я знаю, что ElasticSearch / Lucene выполняет некоторую нормализацию, основанную на количестве терминов в документе. Как я могу отключить эту нормализацию, чтобы документ B получил более высокий балл выше?

550   2  

2 ответов:

Как говорится в другом ответе, было бы интересно посмотреть, есть ли у вас такой же результат на одном осколке. Я думаю, что вы бы и это зависело от нормы для поля тегов, которая учитывается при вычислении баллов с использованием сходства tf/idf (по умолчанию).

Фактически, lucene учитывает частоту термина, другими словами, количество раз, когда термин появляется в поле (1 или 3 в вашем случае), и частоту инвертированного документа, другими словами, как термин часто встречается в индексе, чтобы сравнить его с другими терминами в запросе (в вашем случае это не имеет никакого значения, если вы ищете один термин).

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

Я думаю, что тот факт, что первый документ содержит только этот тег, делает его более важным, чем другие, которые содержат этот тег несколько раз, но также и много других тегов. Если вам не нравится такое поведение,вы можете просто отключить нормы в вашем отображении для поля тегов. Он должен быть включен по умолчанию, если поле "index":"analyzed" (по умолчанию). Вы можете либо переключиться на "index":"not_analyzed", если не хотите, чтобы ваше поле тегов анализировалось (обычно это имеет смысл, но зависит от ваших данных и домена) или добавьте опцию "omit_norms": true в поле сопоставление для тегов.

Найдены ли документы на разных черепках? Из эластичных поиск документов:

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

Решение состоит в том, чтобы указать тип поиска. Воспользуйся dfs_query_and_fetch тип поиска для выполнения начальной фазы рассеяния, которая идет и вычисляет распределенные частоты термов для более точного подсчета очков.

Вы можете прочитать больше здесь .

Comments

    Ничего не найдено.