solr中英文分詞模糊查詢

在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"/>

 

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



 

 

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



 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章