solr查詢不使用query analyzer中文分詞的問題解決

schema.xml已配置query的中文分詞器,但搜索的結果不盡如意,solr並沒有按照分詞來進行搜索。比如搜索“我要吃飯了”,並沒有把包含“吃飯”的文檔給搜索出來。解決過程如下:

[b]1.query analyzer使用IK,配置如下:[/b]
<analyzer type ="query" >
<tokenizer class ="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false" />

[b]2.query analyzer效果如圖:[/b]
[img]http://dl.iteye.com/upload/picture/pic/80242/403fe5ac-e85b-34a9-9e80-fe96a2b827ab.png[/img]
我要吃飯了,可分詞爲“要吃”和“吃飯”。如果搜索“我要吃飯了”,solr應該把這兩個詞以OR的方式去搜索,結果卻一廂情願。

[b]3.引用http://blog.chenlb.com/2010/08/get-solr-analysis-word.html[/b]
[i]“這個問題的根本原因是 lucene / solr 使用的查詢解析器生成的 Query 是短語查詢。短語查詢默認又是連續的詞中沒有其它字符。所以會找不到。
目前我知的方式大概有二種:
1、查詢前分詞一遍,把分出的詞用空格分開,再去搜索(叫它爲查詢預處理)。查詢前分詞可以上面的接口。
2、擴展 solr query parser,返回 boolean query。”[/i]

[b]4.使用方法1解決問題[/b]
即搜索前,先處理一下query analyzer的分詞,然後再搜索。
solr分詞的接口爲:http://localhost:8080/solr/analysis/field?q=我要吃飯了
如果爲多核配置,類似於http://localhost:8080/solr/核心名/analysis/field?q=我要吃飯了

結果返回:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
</lst>
<lst name="analysis">
<lst name="field_types" />
<lst name="field_names">
<lst name="text">
<lst name="query">
<arr name="org.wltea.analyzer.lucene.IKTokenizer">
<lst>
<str name="text">要吃</str>
<str name="type">word</str>
<int name="start">1</int>
<int name="end">3</int>
<int name="position">2</int>
</lst>
<lst>
<str name="text">吃飯</str>
<str name="type">word</str>
<int name="start">2</int>
<int name="end">4</int>
<int name="position">3</int>
</lst>
</arr>
</lst>
</lst>
</lst>
</lst>
</response>
注意<lst name="query">元素下可能有filter。我們只需要解析以上的xml,就可以獲取到分詞列表了。

最後,將分詞列表組裝成類似(要吃 OR 吃飯)的格式,就可以搜索到想要的結果。例如:
http://localhost:8080/solr/select/?q=(要吃 OR 吃飯)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章