嗨,我一直在我的应用程序中使用正常的轨活动记录类似搜索,我开始使用黑子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 Grand Plaisir Cabernet Sauvignon Shiraz Malbec Petit Verdot Cabernet Franc
760大温布兰克
768大胭脂
857尊贵大酒
1067大古典
1584大温德·格兰尼利
3389大康斯坦斯马斯喀特
3708大香槟
3857大康斯坦斯马斯喀特

@rails_search_results
186大储备
688 Grand Plaisir Cabernet Sauvignon Shiraz Malbec Petit Verdot Cabernet Franc
760大温布兰克
768大胭脂
857尊贵大酒
969 River Grandeur Cape Blend
972河赤霞珠赤霞珠
973夏敦埃大河大酒店
974 River Chen勃朗峰Chenin Blanc
975河大帝皮诺塔格
976 River Grandeur Sauvignon Blanc
977设拉子大河
978玫瑰大河
1067大古典
1584大温德·格兰尼利
3389大康斯坦斯马斯喀特
3708大香槟
3857大康斯坦斯马斯喀特

似乎Solr找不到与“ Grandeur”相对应的条目,而只是找到了完全匹配的条目?我怎样才能解决这个问题?


搜索2

search_string =“ rood”

@solr_search_results
200 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
3198 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
3394根

@rails_search_results
200 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
483 Roodeberg Red Cabernet Sauvignon Shiraz Merlot赤霞珠
484罗德堡白长相思霞多丽陈宁维奥涅尔
1113 Zevenrood
3044鲁德瓦尔
3198 Dassies Rood Cinsaut Cabernet Sauvignon Ruby Cabernet
3394根
3477 Roodeberg红
3478 Roodeberg白色
3594 Roodeberg白色
3604 Roodeberg红

同样的事情在这里发生,当search_string ='rood'时,solr找不到'Roodeberg',它只找到了完全匹配的东西



更新资料

感谢DanS,在schema.xml中添加了nGram过滤器以进行部分匹配
但仍未显示所有结果


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>




它仍然不能完全满足我的要求,请看以下示例


搜索3

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梅鹿lot
1073梅洛
1075美乐
1089美乐
1096梅洛
1111梅洛
1121梅洛
1144梅洛
1145梅洛
1169美乐

@rails_search_results
34骑士储备混合梅洛赤霞珠法郎赤霞珠西拉子
129 Matt Black Cabernet Sauvignon Shiraz Merlot Petit Verdot Mourvedre Pinotage品名
130美乐
202美乐
240格拉帕赤霞珠梅洛红葡萄酒
306美乐
336美乐
416干玫瑰酒梅洛
477 Orchestra Cabernet Sauvignon Malbec Merlot Cab Franc Sh​​iraz
483 Roodeberg Red Cabernet Sauvignon Shiraz Merlot赤霞珠
556梅洛
579美乐
592美乐
614赤霞珠梅洛
623美乐
640美乐
656梅洛赤霞珠法郎长相思书法
672 Ondine梅洛
689美乐
694美乐
696 Barrel Select美乐
714美乐
762梅洛私人珍藏
776美乐
790美乐
795梅洛私人珍藏
816 JJ手工葡萄酒梅洛
832金三角梅鹿lot
841美乐
842梅洛玫瑰
854鹰冠赤霞珠梅洛红葡萄酒
865美乐
877酿酒师之选梅洛设拉子
891梅洛
892梅洛保护区
893山红设拉子梅洛
941酒窖精选梅洛赤霞珠
943葡萄园选择卡伯内特苏维浓梅洛红葡萄酒法郎西拉
947美乐
982 Boet Erasmus Cabernet Sauvignon Merlot Malbec Petit Verdot
983 Cara Cabernet Sauvignon Shiraz Merlot赤霞珠
984经典赤霞珠西拉子梅洛
1010 Laureat赤霞珠梅洛葡萄酒
1015美乐
1045美乐
1046梅鹿lot
1073梅洛
1075美乐
1079赤霞珠/梅洛
1089美乐
1093阿德堡赤霞珠梅洛红葡萄酒
1096梅洛
1104 Z Collection赤霞珠Franc Merlot赤霞珠
1111梅洛
1121梅洛
1144梅洛
1145梅洛
1169美乐
1186梅洛
1254赤霞珠梅洛
1260赤霞珠/梅洛
1261美乐
1269美乐
1326美乐
1349赤霞珠梅洛
1364品种选择梅乐
1381美乐
1384赤霞珠梅洛
1393赤霞珠梅洛
1401赤霞珠梅洛
1404梅洛
1421小赤霞珠梅洛
1424梅鹿lot
1431系列梅洛
1443梅洛
1454梅洛
1467 Poker Hill西拉子梅洛葡萄酒
1468梅洛
1476梅洛
1491年情况梅洛
1495孔雀岭梅洛
1542美乐
1543梅鹿lot
1549梅洛
1552梅洛保护区
1582未过滤的梅乐
1592美乐
3001美乐
3007赤霞珠梅洛
3036赤霞珠梅洛
3056美乐
3067洁食梅鹿lot
3073有机梅鹿lot
3079优质梅乐
3091梅洛
3106梅洛酒,带些许马尔贝克
3133赤霞珠梅洛
3143梅洛五气候
3154后备第一梅洛
3182拉诺伊赤霞珠梅洛红葡萄酒
3183 Reserve Collection Cab Sauv Merlot Cab Franc
3200美乐
3236 Giorgio Cabernet Sauvignon梅洛小珀特·维多德·设拉子
3258丹妮·德·湿赤霞珠梅洛
3276 Red Cabernet Sauvignon Merlot Cab Franc珀蒂·维多德·设拉子
3288美乐
3303四重奏皮诺塔格赤霞珠梅洛红葡萄酒设拉子
3307分集梅洛·马尔贝克
3311 Vineyard Creations梅鹿lot
3318 Caapmans赤霞珠梅洛
3321 Luipaardsberg梅洛
3322美乐
3326 Rhinofields梅洛
3334美乐
3343梅洛
3363梅洛赤霞珠
3372美乐
3390美乐
3416 R 62梅洛赤霞珠
3418不插电62梅洛玫瑰
3419拔下62 Merlot Shiraz
3431美乐
3439 KC赤霞珠梅洛
3471 Orchestra Cabernet Sauvignon Malbec Merlot Cab Franc Sh​​iraz
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 Duckitt梅洛赤霞珠
3919美乐
3947梅鹿lot

最佳答案

好像您要match substrings

将以下过滤器添加到schema.xml中,以匹配索引文本的任何前缀:

<filter class="solr.EdgeNGramFilterFactory"/>


或以下内容匹配任意子字符串:

<filter class="solr.NGramFilterFactory"/>


有关更多信息,请参见Solr wiki

10-06 02:47