Как настроить Sunspot на поиск последовательностей символов вместо слов?

Я хотел понять, ищет ли Sunspot в стандартном режиме слова или последовательности символов в полнотекстовом поиске и как заставить его искать последовательности.

Например, у меня есть следующая установка:

class User < ActiveRecord::Base
   searchable do
      text :email
   end
end

с одним User по электронной почте "[email protected]"

следующий запрос:

search = User.search do 
   fulltext 'matsinopoulos'
end

не приносит никакого результата, тогда как:

search = User.search do
   fulltext '[email protected]'
end

приносит.

Есть ли какой-либо параметр конфигурации для солнечных пятен, чтобы он соответствовал последовательностям символов вместо слов?

Или я что-то не так делаю?


person p.matsinopoulos    schedule 26.08.2012    source источник


Ответы (1)


Нужно настроить файл:

solr/conf/schema.xml

Стандартная запись:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

необходимо обратиться:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory"
            minGramSize="3"
            maxGramSize="30"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>`
</fieldType>

Очень хорошую ссылку на конфигурацию Solr можно найти здесь:

http://techbot.me/2011/01/full-text-search-in-in-rails-with-sunspot-and-solr/

но обратите внимание, что когда дело доходит до частичного совпадения слов, эта ссылка говорит о EdgeNGramFilterFactory, который индексирует только начало слов. Чтобы Solr соответствовал любой части слова, необходимо использовать NGramFilterFactory.

Обратите также внимание, что мы установили minGramSize в 3 и maxGramSize в 30. Таким образом, шаблоны длиной менее 3 или более 30 не будут возвращаться в запросах.

person Mohanraj    schedule 27.08.2012