#ruby-on-rails #search #solr #sunspot
#ruby-on-rails #Поиск #solr #солнечное пятно
Вопрос:
В настоящее время я использую sunspot gem для реализации полнотекстового поиска в моем приложении rails. Запросы на моем веб-сайте через Sunspot / Solr работают и возвращают правильные результаты. Однако, когда я пытаюсь выполнить запрос с помощью страницы администратора Solr, у меня возникают трудности с отображением результатов. Используя строку запроса *:*
, я могу отобразить все результаты, содержащиеся в моей индексированной базе данных, но я не могу выполнить правильный запрос. Если я попытаюсь выполнить запрос, используя строку, отличную от *:*
, например test
, никаких результатов не возвращается, и я остаюсь с:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">21</int>
<lst name="params">
<str name="explainOther"/>
<str name="fl">*,score</str>
<str name="indent">on</str>
<str name="start">0</str>
<str name="q">test</str>
<str name="hl.fl"/>
<str name="qt"/>
<str name="wt"/>
<str name="fq"/>
<str name="version">2.2</str>
<str name="rows">10</str>
</lst>
</lst>
<result name="response" numFound="0" start="0" maxScore="0.0"/>
</response>
Выполнение того же запроса с использованием строки: test
в реальном приложении rails возвращает более 100 результатов.
Как я могу заставить запросы на странице администратора Solr возвращать те же элементы, что и запросы, сделанные в приложении rails?
Ответ №1:
*:*
в основном выполнял бы поиск all по всем полям и, следовательно, соответствовал бы всем документам.
В каком поле вы выполняете поиск в приложении Rails?
По умолчанию запросы через Solr admin выполняются в поле поиска по умолчанию (schema.xml ).
<defaultSearchField>text</defaultSearchField>
Попробуйте изменить ваш запрос, выполняемый в solr, на конкретное поле, например, q=some_field:test
и проверьте, возвращаются ли результаты.
Ответ №2:
Немного расширяя ответ Джайендры (который, по сути, правильный):
Если я попытаюсь выполнить запрос, используя строку, отличную от
*:*
, напримерtest
, никаких результатов не возвращается…
Этот запрос выполняется против defaultSearchField
, который text
по умолчанию находится в Sunspot. Однако, как ни странно, Sunspot ничего не вводит в это text
поле, поэтому ваши результаты поиска верны. Нет документов с термином test
в их text
поле, потому что нет документов с text
полем.
У вас может быть, скажем, title_text
поле. Вы можете запросить это поле напрямую с помощью q=title_text:test
.
Вы также можете имитировать запросы Sunspot: используйте анализатор запросов DisMax, явно указав поля для запроса qf
. Это полезно, если вы хотите выполнить запрос по нескольким текстовым полям, не говоря уже о других преимуществах DisMax: q=testamp;defType=dismaxamp;qf=title_text body_text
Кроме того, Sunspot регистрирует свои запросы в development.log
, что является хорошим местом для поиска примеров.