嗨,我一直在我的应用程序中使用普通的 rails 活动记录 LIKE 搜索,我开始使用 sunspot solr 搜索。我希望它尽可能接近 Rails LIKE 搜索。
葡萄酒.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
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 Cabernet Sauvignon
973 River Grandeur Chardonnay
974 River Grandeur Chenin Blanc
975 River Grandeur Pinotage
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 = "路"
@solr_search_results
200 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
3198 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
3394 Rood
@rails_search_results
200 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
483 Roodeberg Red Cabernet Sauvignon Shiraz Merlot
484 Roodeberg White Sauvignon Blanc Chardonnay Chenin Viognier
1113 Zevenrood
3044 Roodewal
3198 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
3394 Rood
3477 Roodeberg Red
3478 Roodeberg White
3594 Roodeberg White
3604 Roodeberg Red
同样的事情发生在这里,当search_string = 'rood'时solr没有找到'Roodeberg',它只找到了完全匹配
更新
向 schema.xml 添加 nGram 过滤器以进行部分匹配,感谢 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 = "merl"
@solr_search_results
130 Merlot
202 Merlot
306 Merlot
336 Merlot
556 Merlot
579 Merlot
592 Merlot
623 Merlot
640 Merlot
689 Merlot
694 Merlot
714 Merlot
776 Merlot
790 Merlot
841 Merlot
865 Merlot
891 Merlot
947 Merlot
1015 Merlot
1045 Merlot
1046 Merlot
1073 Merlot
1075 Merlot
1089 Merlot
1096 美乐
1111 美乐
1121 美乐
1144 美乐
1145 美乐
1169 美
乐 @rails_search_results
34 Cavalier Reserve Blend Merlot Cabernet Franc Cabernet Sauvignon Shiraz
129 Matt Black Cabernet Sauvignon Shiraz Merlot Petit Verdot Mourvedre Pinotage
130 Merlot
202 Merlot
240 Grappa Cabernet Merlot Premium
306 Merlot
336 Merlot
416 Dry Rosè Merlot
477 Orchestra Cabernet Sauvignon Malbec Merlot Cab Franc
Shiraz 483 Roodeberg Red赤霞珠 设拉子 美乐
556 美乐
579 美乐
592 美乐
614 赤霞珠 美乐
623 美乐
640 美
乐 656 书法美乐 品丽珠 长相思
672 Ondine 美乐
689 美乐
694 美乐
696 桶装美乐
714 美乐
762 私人珍藏美乐
776 美乐
790 美乐
795 私人珍藏美乐
816 JJ 手工葡萄酒 美乐
832 金三角美乐
841 美乐
842 桃红葡萄酒
854 鹰冠赤霞珠美乐
865 美乐
877 酿酒师精选美乐 设拉子
891 美乐
892 珍藏美乐
893 山红设拉子 美乐
941酒窖精选梅洛赤霞珠
943 葡萄园精选赤霞珠 梅洛 Cab Franc Shiraz
947 Merlot
982 Boet Erasmus Cabernet Sauvignon Merlot Malbec Petit Verdot
983 Cara Cabernet Sauvignon Shiraz Merlot
984 Classic Cabernet Sauvignon Shiraz Merlot
1010 Laureat Cabernet Sauvignon Merlot
1015 Merlot
1045 Merlot
1046 Merlot
1073 Merlot
1075 Merlot
1079 Cabernet/Merlot
1089 Merlot
1093 Adelberg Cabernet Sauvignon Merlot
1096 Merlot
1104 Z Collection Cabernet Franc Merlot Cabernet Sauvignon
1111 Merlot
1121 Merlot
1144 Merlot
1145 Merlot
1169 Merlot
1186 Merlot
1254 Cabernet长相思 美乐
1260 赤霞珠/美乐
1261 美乐
1269 美乐
1326 美
乐 1349 赤霞珠 美乐
1364 品种选择 美乐
1381 美
乐 1384 赤霞珠 美乐
1393 Cabernet Sauvignon Merlot
1401 Cabernet Sauvignon Merlot
1404 Merlot
1421 Petit Cabernet Sauvignon Merlot
1424 Merlot
1431 Collection Merlot
1443 Merlot
1454 Merlot 1454 Merlot
1467 Merlot 1467
Merlot 1468
Merlot
1468 Merlot
1476 Inderlland 1476 Inderllance 1476 Interlanlllance
1491
1491
1491
1491
零售店未过滤美乐
1592 美乐
3001 美
乐 3007 赤霞珠 美乐
3036 赤霞珠 美乐
3056 美乐
3067 犹太美乐
3073 有机美乐
3079 优质美乐
3091 Merlot
3106 Merlot with a dash of Malbec
3133 Cabernet Sauvignon Merlot
3143 Five Climates Merlot
3154 Reserve No1 Merlot
3182 Lanoy Cabernet Sauvignon Merlot
3183 Reserve Collection Cab Sauv Merlot Cab Franc
3200 Merlot
3236 Giorgio Cabernet Sauvignon Merlot Petit Verdot Shiraz
Svignon 3258 Danie De Wet Caber梅洛
3276 红赤霞珠 梅洛 法郎小维多设拉子
3288 梅洛
3303 四重皮诺塔吉赤霞珠 梅洛 设拉子
3307 多样性梅洛 马尔贝克
3311 葡萄园创作梅洛
3318 卡普曼赤霞珠 梅洛
3321 Luipaardsberg 梅洛
3322 梅洛
3326 Rhinofields Merlot
3334 Merlot
3343 Merlot
3363 Merlot Cabernet Sauvignon
3372 Merlot
3390 Merlot
3416 R 62 Merlot Cabernet Sauvignon
3418 Unplugged 62 Merlot Rosé
3419 Unplugged 62 Merlot Shiraz
3431 Merlot
3439 KC Cabernet Sauvignon Merlot
3471 Orchestra Cabernet Sauvignon Malbec Merlot Cab Franc
Shiraz 3497 Merlot
3498 Merlot 赤霞珠
3510 Merlot
3531 Merlot
3540 Merlot
3560 Merlot
3568 Merlot Rose
3578 特别版 Merlot
3581 Merlot
3584 Cabernet Sauvignon Merlot
3624 Merlot
3642 Cellar Selecti on Merlot
3657 Merlot
3677 Merlot
3681 Merlot
3685 Series C Cabernet Sauvignon Merlot Cab Franc
3693 Merlot
3728 Alexanderfontein Merlot
3755 Peacock Ridge Merlot
3771 The Old Museum Merlot
3773 Cellar Selection Cabernet Sauvignon Merlot
3820 Merlot
3859 Merlot
3882 Dunstone Merlot
3900 Duckitt Merlot Cabernet Sauvignon
3919 Merlot
3947 Merlot