Sunspot Solr Искать как активную запись Rails 'LIKE' искать

Привет, я использовал обычную активную запись рельсов LIKE search в своем приложении, я начал использовать поиск солнечных пятен 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]}


search1
search_string = "большой"

@solr_search_results
186 Grand Reserve
688 Grand Plaisir Cabernet Sauvignon Shiraz Malbec Petit Verdot Cabernet Franc
760 Grand Vin Blanc
768 Grand Rouge
857 Premier Grand Cru
1067 Grand Classique
1584 Grand Vin De Glenelly
3389 Grand Constance Muscat
3708 Grand Cuvèe Brut
3857 Grand Constance Muscat

@rails_search_results
186 Grand Reserve
688 Grand Plaisir Cabernet Sauvignon Shiraz Malbec Petit Verdot Cabernet Franc
760 Grand Vin Blanc
768 Grand Rouge
857 Premier Grand Cru
969 River Grandeur Cape Blend
972 River Grandeur Каберне Совиньон
973 River Grandeur Chardonnay
974 River Grandeur Шенен Блан
975 River Grandeur Пинотаж< br /> 976 River Grandeur Sauvignon Blanc
977 River Grandeur Shiraz
978 River Grandeur Rose
1067 Grand Classique
1584 Grand Vin De Glenelly
3389 Grand Constance Muscat
3708 Grand Cuvèe Brut
3857 Grand Constance Muscat

Кажется, Solr не нашел записи со словом «Grandeur», а только точные совпадения? Как я могу это исправить?


search2
search_string = "rood"

@solr_search_results
200 Дасси Руд Синсо Каберне Совиньон Руби Каберне
3198 Дасси Руд Синсо Каберне Совиньон Руби Каберне
3394 Руд

@rails_search_results
200 Дасси Руд Синсо Каберне Совиньон Руби Каберне
483 Рудеберг Ред Каберне Совиньон Шираз Мерло
484 Рудеберг Уайт Совиньон Блан Шардоне Шенен Вионье
1113 Зевенруд
> 3044 Рудвал
3198 Дасси Руд Синсо Каберне Совиньон Руби Каберне
3394 Руд
3477 Рудеберг Красный
3478 Рудеберг Белый
3594 Рудеберг Белый
3604 Рудеберг Красный< br />
Здесь происходит то же самое, solr не нашел «Roodeberg», когда search_string = «rood», он нашел только точное совпадение


Похоже, вы хотите соответствовать подстрокам.

Добавлен фильтр nGram в schema.xml для частичного соответствия. Спасибо DanS
Но все равно не отображаются все результаты

приложение/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 = "мерл"

Обновлять


person Francois    schedule 15.05.2012    source источник


Ответы (2)


Добавьте следующий фильтр в файл schema.xml, чтобы он соответствовал любому префиксу индексированного текста:

Или следующее для сопоставления произвольных подстрок:

<filter class="solr.EdgeNGramFilterFactory"/>

Дополнительные сведения см. в Вики-странице Solr.

<filter class="solr.NGramFilterFactory"/>

Исправлено! Кажется, Solr по умолчанию показывает только 30 записей, поэтому он показывал только самые релевантные совпадения и пропускал другие, которые я также хотел.
Я добавил этот файл

person DanS    schedule 15.05.2012
comment
Попробуйте настроить минимальный и максимальный размер в граммах: _1_. - person Francois; 15.05.2012
comment
Я добавил nGram и EdgeNgram, и теперь, похоже, все работает очень хорошо, спасибо! - person DanS; 15.05.2012
comment
Я думаю, вы можете удалить EdgeNGram. NGram — это то, что вам нужно, так как он соответствует подстрокам в середине, а не только по краям. - person Francois; 15.05.2012
comment
когда я выполняю поиск для «merl», он показывает только пару результатов, мне увеличить maxGramSize? - person DanS; 15.05.2012
comment
Нужно ли переиндексировать после добавления новых фильтров в schema.xml? Или просто перезапустить Solr? - person Francois; 15.05.2012
comment
вместо этого вы должны использовать нумерацию страниц, потому что вы всегда будете ограничены этим числом - person an yu; 30.01.2013

Кажется, это работает отчасти, но когда я ищу «Dassies Ro», solr не возвращает результатов, но рельсы возвращаются -› 200 Dassie Rood Cinsaut Cabernet Sauvignon Ruby Cabernet, 201 Dassie Rose, 3198 Dassie Rood Cinsaut Cabernet Sauvignon Ruby Cabernet, 3199 Dassie Rosé

myapp/config/initializers/sunspot_solr.rb

Обновление2

Sunspot.config.pagination.default_per_page = 3000
person Francois    schedule 21.05.2012
comment
Model.search do paginate :page =› params[:page], :per_page =› 1 end, и, конечно же, ваш полный текст или что вы там используете, тогда вы можете позвонить с параметром de page или использовать, например, kaminari - person Alexis; 06.04.2015
comment
@solr_search_results
130 Мерло
202 Мерло
306 Мерло
336 Мерло
556 Мерло
579 Мерло
592 Мерло
623 Мерло
640 Мерло
689 Мерло
694 Мерло
714 Мерло
776 Мерло
790 Мерло
841 Мерло< br /> 865 Мерло
891 Мерло
947 Мерло
1015 Мерло
1045 Мерло
1046 Мерло
1073 Мерло
1075 Мерло
1089 Мерло
1096 Мерло
1111 Мерло
1121 Мерло
1144 Мерло
1145 Мерло
1169 Мерло

@rails_search_results
34 Cavalier Reserve Blend Мерло Каберне Фран Каберне Совиньон Шираз
129 Матовый Блэк Каберне Совиньон Шираз Мерло Пети Вердо Мурведр Пинотаж
130 Мерло
202 Мерло
240 Граппа Каберне Мерло Премиум
306 Мерло
336 Мерло
416 Сухое Розе Мерло
477 Оркестр Каберне Совиньон Мальбек Мерло Кабер Фран Шираз
483 Родебе rg Красный Каберне Совиньон Шираз Мерло
556 Мерло
579 Мерло
592 Мерло
614 Каберне Мерло
623 Мерло
640 Мерло
656 Каллиграфия Мерло Каберне Фран Совиньон Блан
672 Ондин Мерло
689 Мерло
694 Мерло
696 Баррел Селект Мерло
714 Мерло
762 Мерло из частной коллекции
776 Мерло
790 Мерло
795 Частная коллекция Мерло
816 Вина ручной работы JJ Мерло
832 Золотой треугольник Мерло
841 Мерло
842 Мерло розовое
854 Eagle Crest Каберне Совиньон Мерло
865 Мерло
877 Выбор виноделов Мерло Шираз
891 Мерло
892 Мерло Резерв
893 Маунтин Ред Шираз Мерло
941 Мерло Cellar Selection Каберне Совиньон
943 Выбор виноградников Каберне Совиньон Мерло Каб Франк Шираз
947 Мерло
982 Боэт Эразмус Каберне Совиньон Мерло Мальбек Пти Вердо
983 Кара Каберне Совиньон Шираз Мерло
984 Классик Каберн et Sauvignon Shiraz Merlot
1010 Laureat Cabernet Sauvignon Merlot
1015 Merlot
1045 Merlot
1046 Merlot
1073 Merlot
1075 Merlot
1079 Cabernet/ Мерло
1089 Мерло
1093 Адельберг Каберне Совиньон Мерло
1096 Мерло
1104 Z Коллекция Каберне Фран Мерло Каберне Совиньон
1111 Мерло
1121 Мерло
1144 Мерло
1145 Мерло
1169 Мерло
1186 Мерло
1254 Каберне Совиньон Мерло
1260 Каберне Совиньон/Мерло
1261 Мерло
1269 Мерло< br /> 1326 Мерло
1349 Каберне Совиньон Мерло
1364 Селекция сортов Мерло
1381 Мерло
1384 Каберне Совиньон Мерло
1393 Каберне Совиньон Мерло
1401 Каберне Совиньон Мерло
1404 Мерло
1421 Пти Каберне Совиньон Мерло
1424 Мерло
1431 Коллекционное Мерло
1443 Мерло
1454 Мерло
1467 Покер Хилл Шираз Мерло
1468 Мерло
1476 Мерло
149 1 Обстоятельства Мерло
1495 Пикок-Ридж Мерло
1542 Мерло
1543 Мерло
1549 Мерло
1552 Мерло Резерв
1582 Нефильтрованное Мерло
1592 Мерло< br /> 3001 Мерло
3007 Каберне Совиньон Мерло
3036 Каберне Совиньон Мерло
3056 Мерло
3067 Кошерное Мерло
3073 Органическое Мерло
3079 Премиум Мерло
3091 Мерло
3106 Мерло с примесью Мальбека
3133 Каберне Совиньон Мерло
3143 Мерло Five Climates
3154 Резерв №1 Мерло
3182 Ланой Каберне Совиньон Мерло
3183 Reserve Collection Cab Sauv Merlot Cab Franc
3200 Merlot
3236 Giorgio Cabernet Sauvignon Merlot Petit Verdot Shiraz
3258 Danie De Wet Cabernet Sauvignon Merlot
3276 Red Cabernet Sauvignon Merlot Cab Franc Пти Вердо Шираз
3288 Мерло
3303 Квартет Пинотаж Каберне Совиньон Мерло Шираз
3307 Разнообразие Мерло Мальбек
3311 Виноградники Мерло
3318 Капманс С Аберне Совиньон Мерло
3321 Луипаардсберг Мерло
3322 Мерло
3326 Ринофилдс Мерло
3334 Мерло
3343 Мерло
3363 Мерло Каберне Совиньон
3372 Мерло< br /> 3390 Мерло
3416 R 62 Мерло Каберне Совиньон
3418 Unplugged 62 Мерло Розе
3419 Unplugged 62 Мерло Шираз
3431 Мерло
3439 KC Каберне Совиньон Мерло
3471 Оркестр Каберне Совиньон Мальбек Мерло Кабер Фран Шираз
3497 Мерло
3498 Мерло Каберне Совиньон
3510 Мерло
3531 Мерло
3540 Мерло
3560 Мерло< br /> 3568 Мерло Розе
3578 Мерло Special Edition
3581 Мерло
3584 Каберне Совиньон Мерло
3624 Мерло
3642 Cellar Selecti on Merlot
3657 Мерло< br /> 3677 Мерло
3681 Мерло
3685 Серия C Каберне Совиньон Мерло Cab Franc
3693 Мерло
3728 Александерфонтейн Мерло
3755 Пикок-Ридж Мерло
3771 Старый музей Мерло - person Alexis; 06.04.2015