solr6中IKAnalyzer分詞配置


參考文章:http://www.tuicool.com/articles/faYFBzA

solr6 IKAnalyzer分詞github地址:https://github.com/suyin58/ik-analyzer-solr6 (工程下載后,打包成jar包。放在tomcat中solr的WEB-INF/lib目錄下)

 

在solr的分詞配置后成功后,在solr后台管理界面進行模糊查詢的時候會存在分詞匹配個數的問題。打個簡單的比方:搜索蘭州XXXX酒店。 往往這個時候就有一大批數據出來,只要包含了分詞后的詞的數據都會搜索出來,給客戶的體驗不怎么好,本來客戶是想只展示蘭州的XXXX酒店的,結果北京的、廣州的,還有其他名稱的酒店都給搜索出來。這個時候就是分詞的匹配個數設置的問題了。

首先還是看下分詞的配置(IK Analyzer的導入這里不作講解了,網上很多例子);

在schema.xml增加如下配置:

<fieldType name="text_ik" class="solr.TextField">

<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>

<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>

</fieldType>

<dynamicField name="*_sa"  type="text_ik"  indexed="true"  stored="true" />

這里自定了一個類型,在solr中凡是以"_sa"結尾的都將作模糊查詢(可以自己定義結尾的類型);

看看分詞的結果:

如搜索:hotelname_sa:蘭州錦江陽光酒店

理論上客戶想要的是包含了這條語句的所有分詞的數據,但是solr默認是or的關系,即包含了蘭州、錦江、陽光、酒店中任意的詞都會搜索出來,顯然不是我們所要的。

解決辦法有兩種(根據各自的需求自己選擇):

1、若可以隨意選擇匹配程度,不需要100%的匹配,可以在查詢語句中增加參數:defType=edismax&mm=60%25  (mm是最小匹配的數量,可以是個固定的值,也可也是個百分比)

如:http://192.168.1.211:8787/solr/hotel_info/select?q=hotelname_sa%3A陽光蘭州錦江酒店&fl=hotelname_sa&wt=json&indent=true&defType=edismax&mm=60%25

2、在solr 的schema.xml中把 solrQueryParser 的defaultOperator  變成AND (默認這個參數是被注釋掉的,找到后改一下就可以了)

<solrQueryParser defaultOperator="AND"/>

如果上面兩種都有設置,以第一種優先生效,第二種就被忽略掉了,因此可以根據需要來選擇使用

加上后綴后,只有第一種配置生效:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM