Я хочу найти Radiohead, но не Radiohead с Sunspot/Solr

Я использую solr через драгоценный камень солнечных пятен в проекте 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?


person lightyrs    schedule 22.12.2011    source источник


Ответы (2)


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

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

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

person Bohemian♦    schedule 23.12.2011
comment
Отлично, спасибо за информацию. Я попробую это завтра и отчитаюсь. - person lightyrs; 25.12.2011

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

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

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

person Romain Meresse    schedule 22.12.2011
comment
Моя ошибка, это на самом деле то, что я делаю, поэтому я удивлен, что это не работает. Спасибо за ответ. Я отредактирую вопрос. - person lightyrs; 23.12.2011