Поиск Solr с использованием Susnpot Gem

#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 , что является хорошим местом для поиска примеров.