Sunspot Solr Поиск как Rails активная запись 'LIKE' поиск

Привет, я использую обычные рельсы активной записи LIKE поиска в моем приложении, я начал использовать поиск солнечных пятен solr. Хотелось бы, чтобы он действовал как можно ближе к рельсам LIKE поиска.


wine.rb
#sunspot stuff
  searchable :auto_index => true, :auto_remove => true do
  text :name
end
#sunspot stuff


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>


application_controller.rb
search_string = "will input some values here"
query = "%" + search_string + "%"

solr_search = Wine.search do
  fulltext search_string
end
@solr_search_results = solr_search.results.sort_by{|e| e[:id]}

@rails_search_results = Wine.find(:all, :conditions => ['wines.name LIKE ?' , query]).sort_by{|e| e[:id]}


поиск1
search_string = "гранд"

@solr_search_results
186 Гранд Резерв
688 Гранд Плезир Каберне Совиньон Шираз Мальбек Пти Вердо Каберне Франк
760 Гранд Вин Блан
768 Гран-Руж
857 Премьер Гранд Крю
1067 Гранд Классик
1584 Гранд Вин де Гленелли
3389 Великая Констанция Маскат
3708 Гранд Кюве Брю
3857 Гранд Констанс Маскат

@rails_search_results
186 Гранд Резерв
688 Гранд Плезир Каберне Совиньон Шираз Мальбек Пти Вердо Каберне Франк
760 Гранд Вин Блан
768 Гранд Руж
857 Премьер Гранд Крю
969 Ривер Грандёр Кейп Бленд
972 Река Грандер Каберне Совиньон
973 Ривер Грандер Шардоне
974 Река Грандер Шенен Блан
975 Ривер Грандёр Пинотаж
976 Река Грандер Совиньон Блан
977 Ривер Грандер Шираз
978 Ривер Грандер Роуз
1067 ГрандКлассик
1584 Гранд Вин де Гленелли
3389 Великая Констанция Маскат
3708 Гранд Кюве Брю
3857 Grand Constance Muscat

Похоже, solr не нашел записей с «Grandeur» в них, он нашел только точные совпадения? Как это исправить?


поиск2
search_string = "rood"

@solr_search_results
200 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
3198 Dassies Rood Cinsaut Cabernet Совиньон Рубин Каберне
3394 Руд

@rails_search_results
200 Дасси Руд Синсо Каберне Совиньон Рубин Каберне
483 Рудеберг Ред Каберне Совиньон Шираз Мерло
484 Рудеберг Белый Совиньон Блан Шардоне Шенен Вионье
1113 Зевенруд
3044 Рудевал
3198 Дасси Руд Синсо Каберне Совиньон Рубин Каберне
3394 Руд
3477 Рудеберг Ред
3478 Рудеберг Уайт
3594 Рудеберг Уайт
3604 Roodeberg Red

То же самое происходит и здесь, solr не нашел 'Roodeberg', когда search_string = 'rood', он нашел только точное соответствие


Обновление

Добавлен фильтр nGram в схему.xml для частичного сопоставления, спасибо DanS
Но все равно не показывает все результаты

app/solr/conf/schema.xml

<fieldType name="text" class="solr.TextField" omitNorms="false">

    <analyzer type="index">
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
        <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15"/>
    </analyzer>

    <analyzer type="query">
        <tokenizer class="solr.LowerCaseTokenizerFactory"/>
    </analyzer>

</fieldType>



Он все еще не совсем делает то, что я хочу, чтобы он делал,Взгляните на следующий пример

search3
search_string = "merl"

@solr_search_results
130 Мерло
202 Мерло
306 Мерло
336 Мерло
556 Мерло
579 Мерло
592 Мерло
623 Мерло
640 Мерло
689 Мерло
694 Мерло
714 Мерло
776 Мерло
790 Мерло
841 Мерло
865 Мерло
891 Мерло
947 Мерло
1015 Мерло
1045 Мерло
1046 Мерло
1073 Мерло
1075 Мерло
1089 Мерло
1096 Мерло
1111 Мерло
1121 Мерло
1144 Мерло
1145 Мерло
1169 Мерло

@rails_search_results
34 Кавалер Резерв Бленд Мерло Каберне Фран Каберне Совиньон Шираз
129 Мэтт Блэк Каберне Совиньон Шираз Мерло Пти Вердо Мурведре Пинотаж
130 Мерло
202 Мерло
240 Граппа Каберне МерлоПремиум
306 Мерло
336 Мерло
416 Сухая роза Мерло
477 Оркестр Каберне Совиньон Мальбек Мерло Каб Франк Шираз
483 Рудеберг Ред Каберне Совиньон Шираз Мерло
556 Мерло
579 Мерло
592 Мерло
614 Каберне Мерло
623 Мерло
640 Мерло
656 Каллиграфия Мерло Каберне Фран Совиньон Блан
672 Ундина Мерло
689 Мерло
694 Мерло
696 Баррель Выбор Мерло
714 Мерло
762 Частная коллекция Мерло
776 Мерло
790 Мерло
795 Частная коллекция Мерло
816 JJ Вина ручной работы Мерло
832 Золотой треугольник Мерло
841 Мерло
842 Мерло Розе
854 Орлиный гребень Каберне Совиньон Мерло
865 Мерло
877 Выбор виноделов Мерло Шираз
891 Мерло
892 Заповедник Мерло
893 Гора Красный Шираз Мерло
941 Выбор погребаМерло Каберне Совиньон
943 Виноградник Селекция Кабертне Совиньон Мерло Каб Фран Шираз
947 Мерло
982 Боэт Эразм Каберне Совиньон Мерло Мальбек Пти Вердо
983 Кара Каберне Совиньон Шираз Мерло
984 Классический Каберне Совиньон Шираз Мерло
1010 Лоре Каберне Совиньон Мерло
1015 Мерло
1045 Мерло
1046 Мерло
1073 Мерло
1075 Мерло
1079 Каберне/Мерло
1089 Мерло
1093 Адельберг Каберне Совиньон Мерло
1096 Мерло
1104 Z Коллекция Каберне Франк Мерло Каберне Совиньон
1111 Мерло
1121 Мерло
1144 Мерло
1145 Мерло
1169 Мерло
1186 Мерло
1254 Каберне Совиньон Мерло
1260 Каберне Совиньон/Мерло
1261 Мерло
1269 Мерло
1326 Мерло
1349 Каберне Совиньон Мерло
1364 Сорта Селекция Мерло
1381 Мерло
1384 Каберне Совиньон Мерло
1393 Каберне Совиньон Мерло
1401 Каберне Совиньон Мерло
1404 Мерло
1421 Пти Каберне Совиньон Мерло
1424 Мерло
1431 Коллекция Мерло
1443 Мерло
1454 Мерло
1467 Покер Хилл Шираз Мерло
1468 Мерло
1476 Мерло
1491 Обстоятельство Мерло
1495 Пикок Ридж Мерло
1542 Мерло
1543 Мерло
1549 Мерло
1552 Заповедник Мерло
1582 Нефильтрованный Мерло
1592 Мерло
3001 Мерло
3007 Каберне Совиньон Мерло
3036 Каберне Совиньон Мерло
3056 Мерло
3067 Кошерный Мерло
3073 Мерло (органический)
3079 Премиум Мерло
3091 Мерло
3106 Мерло с чертой Мальбека
3133 Каберне Совиньон Мерло
3143 Пять климатов Мерло
3154 Заповедник No1 Мерло
3182 Лануа КабернеСовиньон Мерло
3183 Резерв Коллекция Cab Sauv Merlot Cab Franc
3200 Мерло
3236 Джорджо Каберне Совиньон Мерло Пти Вердо Шираз
3258 Дани де Вет Каберне Совиньон Мерло
3276 Красный Каберне Совиньон Мерло Каб Фран Пти Вердо Шираз
3288 Мерло
3303 Квартет Пинотаж Каберне Совиньон Мерло Шираз
3307 Разнообразие Мерло Мальбек
3311 Виноградник Творения Мерло
3318 Каапман Каберне Совиньон Мерло
3321 Луипаардсберг Мерло
3322 Мерло
3326 Ринофилдс Мерло
3334 Мерло
3343 Мерло
3363 Мерло Каберне Совиньон
3372 Мерло
3390 Мерло
3416 R 62 Мерло Каберне Совиньон
3418 Unplugged 62 Мерло Розе
3419 Unplugged 62 Мерло Шираз
3431 Мерло
3439 KC Каберне Совиньон Мерло
3471 Оркестр Каберне Совиньон Мальбек Мерло Каб Франк Шираз
3497Мерло
3498 Мерло Каберне Совиньон
3510 Мерло
3531 Мерло
3540 Мерло
3560 Мерло
3568 Мерло Роуз
3578 Специальное издание Мерло
3581 Мерло
3584 Каберне Совиньон Мерло
3624 Мерло
3642 Подвал Селеки на Мерло
3657 Мерло
3677 Мерло
3681 Мерло
3685 Серия C Каберне Совиньон Мерло Каб Франк
3693 Мерло
3728 Александерфонтейн Мерло
3755 Пикок Ридж Мерло
3771 Старый музей Мерло
3773 Подвал Выбор Каберне Совиньон Мерло
3820 Мерло
3859 Мерло
3882 Данстоун Мерло
3900 Дакитт Мерло Каберне Совиньон
3919 Мерло
3947 Мерло

5
задан Francois 21 May 2012 в 11:52
поделиться