LINUX.ORG.RU
ФорумAdmin

SOLR поиск

 ,


0

1

Есть работающая система Apache+SOLR. Схема настроена. Создаются индексы. Всё работает. Но - при поиске по индексам выдает не совсем то, что нужно. Поясню. Есть множество документов, у которых в заглавии ‘title’ = «Общая металлургия». Помимо подобных документов, есть еще и множество других, у которых в заглавии встречается либо «общ», либо «металлург». Так вот, релевантный поиск выдает в первую очередь огромное множество вторых вариантов, а те документы, которые, по идее, на 100% совпадают с запросом, находятся где-то в конце. Проверка осуществляется как в собственном приложении, так и в специальном приложении Luke для просмотра индексов. Прошу помощи.


Слишком мало информации.

  1. Какой тип поля ‘title’?
  2. Какие функции преобразования текста выполняются перед индексацией?
  3. Какие функции преобразования текста выполняются над строкой запроса?
  4. Запрос делается только по полю ‘title’ или ‘default’?

(Это всё в настройках схемы смотрим) 5. В запросе есть параметры сортировки? 6. Запрос делается по словам Общая+металлургия или по фразе «Общая металлургия»?

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

anonymous
()

А «металлургия» там только один раз встречается? Возможно алгоритм релевантности выбирает первыми те документы где одно слово из запроса встречается много раз, а только потом документы где есть оба слова но один раз.

maxcom ★★★★★
()

документы, которые, по идее, на 100% совпадают с запросом

Они совпадают один раз, а там «общ» совпадает много раз. Тебе нужно бустить точные совпадения. Гугли solr boost exact match.

От себя могу посоветовать либо использовать keyword токенайзер, либо n-gram если всё-таки нужен нечёткий поиск. С keyword тоже будет нечёткий поиск но не по префиксам, а если например пропущена/заменена гласная в слове (за счёт фильтров). А с n-gram фишка в том, что «общая металлургия» будет матчится большим количеством n-gram (как это по русски-то?) чем просто «общ» и т.п. частичные совпадения.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от anonymous

Я не всё понимаю в настройках схемы. Предлагаю саму схему на рассмотрение: https://disk.yandex.ru/d/OY6fsOtMkY6Yfg и конфиг: https://disk.yandex.ru/d/tdefhuQhViW-4Q Подскажите, что и куда вставить для желаемого результата.

Запрос делается по фразе «Общая металлургия»

basta1
() автор топика
Ответ на: комментарий от basta1

Возможно вот это:

<defaultSearchField>text</defaultSearchField>

  <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
	<solrQueryParser defaultOperator="AND"/>

  <!-- copyField commands copy one field to another at the time a document
        is added to the index.  It's used either to index the same field differently,
        or to add multiple fields to the same field for easier/faster searching.  -->
	<copyField source="title" 	dest="text" /> 
	<copyField source="author" 	dest="text" /> 
	<copyField source="authors" dest="text" /> 
	<copyField source="titles" 	dest="text" /> 
	<copyField source="editors" dest="text" /> 
	<copyField source="cities" 	dest="text" /> 
	<copyField source="years" 	dest="text" /> 
	<copyField source="rubrics"	dest="text" /> 
	<copyField source="series" 	dest="text" />
	<copyField source="ISBN" 	dest="text" />
	<copyField source="ISBN_s" 	dest="text" />
	<copyField source="title" 	dest="titleSort" />
	<copyField source="author" 	dest="authorSort" />
	<copyField source="editors" dest="editorsSort" />
	<copyField source="years" 	dest="yearsSort" />

Поле text объявлено полем для поиска по умолчанию. Это поле формируется копированием в него всех других полей. Если в запросе не указано конкретное поле, то ищется именно по нему. Нужно смотреть какой запрос непосредственно отправляется в SOLR.

anonymous
()
Ответ на: комментарий от basta1

Запрос ты формируешь или он через прослойку (веб-интерфейс) системы формируется? Если ты, добавь параметр fl чтобы искать по конкретному полю.

По поводу

Нашел ресурс с подобной тематикой, но ничего не понял: https://stackoverflow.com/questions/29103155/solr-exact-match-boost-over-text-containing-the-exact-match

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.