Gem "Sunspot" делает различие между символами UTF-8
В приложении Rails я начал использовать sunspot => https://github.com/sunspot/sunspot/blob/master/README.md
Все шло нормально, пока я не заметил это (взято с рельсовой консоли):
1.9.3p194 :002 > MyModel.search{fulltext "leon"}.results
=> [#<MyModel id: 16, name: "Leon">]
1.9.3p194 :003 > MyModel.search{fulltext "león"}.results
=> [#<MyModel id: 18, name: "León">]
Как я могу сказать системе, чтобы она не делала различий между "leon" и "león" (я хочу что-то вроде search{fulltext "leon"} => [#MyModel id: 16 ..., #MyModel id: 18...])
Я искал эту проблему, и я нашел каждый раз один и тот же ответ:
С этой строкой в Gemfile работает следующий выпуск rsolr: gem 'rsolr',:git => "https://github.com/mwmitchell/rsolr.git"
Спасибо
3 ответа
Спасибо за ответы. По крайней мере, я решил это прямо прошлой ночью с другой идеей, которую я взял из http://codeshooter.wordpress.com/2011/01/13/full-text-search-in-in-rails-with-sunspot-and-solr/
идея в Restaurant.rb
text :name do
self.name.my_normalize
end
и функция
to_s.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/,'').downcase
эта строка работает со строками типа "ааааа" --- "аааааа"
В schema.xml необходимо добавить символьный фильтр, как описано в http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters, например:
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
и у вас должен быть mapping-ISOLatin1Accent.txt, у вас должны быть записи, которые отобразят последовательность байтов Юникода в последовательность символов asci. Вы можете увидеть пример здесь mapping-ISOLatin1Accent.txt
Вам необходимо внести изменения в конфигурационные файлы Solr (приложения, а не gem). Solr "встроен" в гем, но вы можете получить доступ к его конфигурации, как если бы он был установлен отдельно. Посмотрите документацию Solr.