Я хочу найти "Radiohead", но не "Radiohead" с Sunspot / Solr - PullRequest
0 голосов
/ 22 декабря 2011

Я использую solr через gem sunspot в проекте rails.

Я индексирую очищенные данные.

В настоящее время моя индексация выполняется следующим образом:

searchable do
  text :title, :boost => 3.0 do
    title.gsub(/\'s\b/, "")
  end
  text :mentions do
    mentions.map do |mention|
      mention.title.gsub(/\'s\b/, "")
    end
  end
end

В настоящее время, если я сделаю:

Video.solr_search { fulltext '"Radiohead"' }

Solr вернет результаты с:

Radiohead's

и

Radiohead

Я хотел бы только найти:

Radiohead

Есть ли способ сделать это через Sunspot?

Ответы [ 2 ]

1 голос
/ 24 декабря 2011

Проверьте, какие фильтры вы определили в разделе анализатора типа поля для вашего поля в schema.xml (в каталоге ... / solr / conf).Вот пример:

  <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            ...
            <filter class="solr.SnowballPorterFilterFactory" language="English" />
        </analyzer>
  </fieldType>

Поведение, которое вы видите, называется "stemming" - здесь индексированное значение - это stem слова, а не само слово.например, «летать», «летать», «летать» и «летать» все будут индексироваться как «летать».Если есть фильтр, похожий на снежный ком (апакерский стеммер), то вы получите поведение, которое видите.Попробуйте удалить фильтр, перезапустить solr, а затем переиндексировать документы.

0 голосов
/ 22 декабря 2011

Вы должны сделать запрос фразы (используя двойные кавычки):

Video.solr_search { fulltext '"Radiohead"' }.

Или измените свой solr schema.xml, чтобы не разбивать "Radiohead's". Я не знаю вашу конфигурацию поля здесь, поэтому я не могу предоставить более подробную информацию ...

...