2017-01-29 3 views
0

Я использую Apache Solr для ведения поисковых запросов на некоторых внутренних документах моего компьютера (хранящихся в базе данных). Я получаю действительно причудливые результаты для поисковых запросов, упорядоченных по нисходящей релевантности. Например, у меня есть 5 слов в моем поисковом запросе. Наиболее актуальным из 4 результатов является документ, содержащий только два из этих слов несколько раз. Единственный документ, содержащий все слова, мертв последним. Если я правильно изменяю слова, то я вижу лучший порядок ранжирования с правильной статьей как наиболее актуальной. Как я могу это исправить? На мой взгляд, документ, содержащий все 5 слов, должен оцениваться выше, чем документ, в котором есть только два из этих слов (чаще указано).Причудливый рейтинг релевантности поиска Apache Solr

+0

Вы можете отправить запрос, который вы делаете, и документы, которые поступают сверху и снизу. –

+0

. Мой поисковый запрос: «Julian Cribb EPA peak oil». Самый важный документ - это просто тот, который упоминает Джулиана 2 раза и Cribb 5 раз. Термин «Джулиан Крибб» появляется в этом документе два раза. Второй содержит «Cribb» дважды, «Julian» однажды и «пиковое масло» один раз. Третий содержит «Джулиан» один раз и «Крибб» один раз (но не вместе из-за того, что Cribb не был выделен). Последний содержит EPA 3 раза, «пиковое масло» один раз и «Julian» один раз и «Cribb» один раз. Все 4 названия содержат «Cribb». – ron136

+0

Пожалуйста, добавьте & request & wt = xml & debug = true в свой запрос и укажите выходные данные источника просмотра в http://pastebin.com/index.php –

ответ

1

Что Solr сделал, это правильный алгоритм, называемый TF-IDF. Итак, в вашем случае заказ может быть объяснен этой формулой.

Одним из возможных решений является игнорирование оценки TF-IDF и подсчет одного удара в документе как один, а просто документ с 5 матчами получит оценку 5, 4 совпадения, получится 4 и т. Д. Запрос постоянной оценки может сделать трюк:

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

Возможный пример запроса:

text:Julian^=1 text:Cribb^=1 text:EPA^=1 text:peak^=1 text:oil^=1 

Другое решение, которое потребует некоторых сценариев будет что-то вроде этого, на первый вам нужен запрос, где вы будете задавать все содержит ровно 5 элементов, например +Julian +Cribb +EPA +peak +oil, то вы сделаете то же самое для комбинации из 4 элементов из 5, если я не ошибаюсь, потребуются дополнительные 5 запросов и обратно, пока вы не проверите все до 1 обязательной оговорки. Тогда у вас будут полные результаты, и вам нужно будет только normalise или просто соединить их, если вы решили, что 5-совместимые документы всегда лучше, чем 4-х совпадающие документы. Минусы этого решения - много запросов, нужно запускать их программно, какой-то скрипт поможет, нормализация не очевидна. Плюсы - вы сохраните как TF-IDF, так и идею согласованных условий.

+0

Спасибо, но я ищу что-то, что учитывало бы как частоту термина, так и количество заданных условий запроса в результатах. Я просто хотел бы предоставить значительно больший вес документам, которые содержат больше условий поиска, чем документам, которые содержат меньше терминов (повторяется много раз). Однако я попробую ваш метод. Благодарю. – ron136

+0

это будет почти невозможно, по крайней мере, с интенсивным дополнительным программированием. – Mysterion

+1

это может быть неверно ... если он использует Solr 6 или более поздней версии, метод оценки по умолчанию - BM25, а не TD-IDF – Persimmonium

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