Запрос фразы SOLR

У меня небольшая проблема при поиске с помощью SOLR 4.0 и попытке фразового запроса.

У меня есть поле под названием «idx_text_general_ci», которое является нечувствительным к регистру (все в нижнем регистре) полем, состоящим из всех полей.

Когда я пытаюсь найти фразу (морской слесарь), мой SOLR отказывается искать фразу, вместо этого разбивая фразу на 2 слова -

/select?defType=edismax&q=idx_text_general_ci:marine%20fitter&debugQuery=true

debugQuery = true вывод ниже:

<lst name="debug">
<str name="rawquerystring">idx_text_general_ci:marine fitter</str>
<str name="querystring">idx_text_general_ci:marine fitter</str>
<str name="parsedquery">
(+(idx_text_general_ci:marine DisjunctionMaxQuery((id:fitter))))/no_coord
</str>
<str name="parsedquery_toString">+(idx_text_general_ci:marine (id:fitter))</str>

Как вы можете видеть выше, он разбивает запрос на 2 части (idx_text_general_ci: marine, затем id: fitter).

Проблема, с которой я столкнулся, заключается в том, что у меня есть точное совпадение для слова «морской слесарь», которое дважды появляется в поле idx_text_general_ci, но имеет меньшую оценку, чем документ, в котором слово «морской» встречается 3 раза. Я знаю, что этого не будет, если мой SOLR будет искать поле с фразой, как ожидалось.

Если я заключу фразу в кавычки, я получу ноль результатов.

Мы будем очень благодарны за любую помощь или толчок в правильном направлении.

заранее спасибо

Алекс


person Alex    schedule 06.07.2012    source источник


Ответы (1)


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

idx_text_general_ci:marine fitter

он переводится в Solr как DisjunctionMaxQuery для idx_text_general_ci:marine и id:fitter. Предположительно, вы хотите idx_text_general_ci:marine и idx_text_general_ci:fitter. У вас есть два варианта: 1) вы можете добавить к каждому слову префикс в правильном поле, за которым следует двоеточие, или вы можете изменить значение defaultSearchField в schema.xml на idx_text_general_ci.

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

person Ansari    schedule 06.07.2012
comment
Привет. Я только что попробовал, и это тоже не работает. Запросы, которые я пробовал, приведены ниже ››› q = idx_text_general_ci: marine + idx_text_general_ci: fitter и q = idx_text_general_ci: marine% 20idx_text_general_ci: fitter Это правильный способ сделать это? - person Alex; 06.07.2012
comment
Можете ли вы попробовать это в админке Solr? Там отлаживать намного проще. Если вы вводите текст прямо в строку браузера, используйте знак +, а не пробел. - person Ansari; 06.07.2012
comment
@Alex В панели администратора вы можете использовать вкладку «Анализ», чтобы ввести часть документа и посмотреть, как она проиндексирована, а затем ввести запрос и посмотреть, как она обрабатывается. Установите флажок «Отладка», и вы сможете определить, в чем заключается несоответствие. - person Ansari; 06.07.2012
comment
Все это было изнутри панели администратора (которая просто отправляет тот же запрос, который я отправляю на свою страницу запроса (/ select? ....) В любом случае, как вы можете видеть, я использовал пробел в одном из запросов, который не работал - person Alex; 06.07.2012
comment
Тогда вам нужно увидеть, как он индексируется :) может быть, что-то не так со стеммингом или что-то в этом роде. Используйте вкладку «Анализ», чтобы убедиться, что обработка индекса и обработки запроса совпадают. - person Ansari; 06.07.2012
comment
Я проанализировал запрос, и он отображается в таблице, в которой говорится, что он разбит на слова, не содержащиеся в предложении / фразе - это нормально? - person Alex; 06.07.2012
comment
Да, все должно быть хорошо. Совпадают ли разбивки индекса и запроса? - person Ansari; 06.07.2012
comment
Да, индекс разбит на ячейки таблицы (в выводе) по пробелу и так же, как и в запросе (в выводе) - person Alex; 06.07.2012
comment
Хррм, я не знаю, что еще попробовать с удаленной отладкой, извините :( - person Ansari; 06.07.2012
comment
Не понимаю, почему не работают фразы в кавычках - думаю, это основная проблема - person Alex; 06.07.2012
comment
Они могут работать - мои фразы в кавычках тоже разделяются на этом интерфейсе. Почему бы вам не сделать это: перейдите в панель администратора и нажмите «Полный интерфейс». Установите флажок включения отладки, введите свой запрос и посмотрите, что в итоге запрашивается, как в Solr. Это должно показать вам, что происходит внутри. Для меня он держит кавычки. - person Ansari; 06.07.2012
comment
Я так и сделал, и цитаты сохранились. Теперь я повторно проиндексировал свое поле с autoGeneratePhraseQueries = true и посмотрю, имеет ли это какое-либо значение. - person Alex; 06.07.2012
comment
Вы когда-нибудь догадывались об этом? - person Ansari; 18.07.2012