Поиск Solr с использованием Susnpot Gem - PullRequest
4 голосов
/ 10 ноября 2011

В настоящее время я использую гем sunspot для реализации полнотекстового поиска в моем приложении 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?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

*:* будет в основном искать все по всем полям и, следовательно, будет соответствовать всем документам.

В каком поле вы ищете из приложения Rails?
По умолчанию запросы через Solr admin запускаютсяв поле поиска по умолчанию (schema.xml).

<defaultSearchField>text</defaultSearchField>

Попробуйте изменить запрос, запущенный на solr, на конкретное поле, например q=some_field:test, и проверьте, возвращаются ли результаты.

2 голосов
/ 10 ноября 2011

Немного расширяю ответ Джаендры (что по сути верно):

Если я попытаюсь сделать запрос, используя строку, отличную от *:*, например, test, никаких результатов не получитсявернул…

Этот запрос выполняется для defaultSearchField, который по умолчанию * Sunspot равен text.Однако, Sunspot ничего не вводит в это поле text, поэтому результаты вашего поиска верны.Нет документов с термином test в их поле text, поскольку нет документов с полем text.

Возможно, у вас есть, скажем, поле title_text.Вы можете запросить это поле напрямую с помощью q=title_text:test.

. Вы также можете имитировать запросы Sunspot: используйте анализатор запросов DisMax, явно указав поля для запроса в qf.Это полезно, если вы хотите выполнять запросы к нескольким текстовым полям, не говоря уже о получении других преимуществ DisMax: q=test&defType=dismax&qf=title_text+body_text

Кроме того, Sunspot регистрирует свои запросы в development.log, что является хорошим местом для поискапримеры.

...