solr4.0+IKAnalyzer 中文搜索,无法查询到结果,目前列举下面两种情况。
情况1:
solr4.0+IKAnalyzer安装好后,根据IKAnalyzer的安装文档在schema.xml做了配置,“随意问技术百科”已索引,但是搜索“随意问”搜索不出结果。
通过在solr的管理界面进行查询,开启 debugQuery(调试模式),查询q参数输入,test:随意问,输出结果中发现:
<lst name="debug"> <str name="rawquerystring">test:随意问</str> <str name="querystring">test:随意问</str> <str name="parsedquery">PhraseQuery(test:"随意 问")</str> <str name="parsedquery_toString">test:"随意 问"</str> <lst name="explain"/> <str name="QParser">LuceneQParser</str> ...
说明中文分词有效果了,但是test:随意问,变成了test:"随意 问",应该是 test:随意 test:问,下面是正确的情况下的调试结果:
<lst name="debug"> <str name="rawquerystring">test:随意问</str> <str name="querystring">test:随意问</str> <str name="parsedquery">test:随意 test:问</str> <str name="parsedquery_toString">test:随意 test:问</str> <lst name="explain"/> <str name="QParser">LuceneQParser</str> ...
解决方法:
修改schema.xml,将
<schema name="example core zero" version="1.1">
修改为
<schema name="example core zero" version="1.5">
情况2:
使用solr+IKAnalyzer搭建的全文搜索平台,测试中发现一个问题如下:
1 将“随意问技术百科”进行索引
2 搜索“随意问”或“技术百科”等连在一起的词组可以得到相应结果
3 搜索“随意 问”,中间加了空格,搜索不到相应的结果
按理说“随意 问”字段进行搜索时会划分为“随意”和“问”两个字段,可是为什么没有相应的结果呢?
下面是该字段及fieldType配置
<field name="title" type="text_suiyiwen" indexed="true" stored="true"/> <fieldType name="text_suiyiwen" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
解决方法:
你是不是这么搜索的 q=title:随意 问 ?
首先你要了解产生这个原因的原理。
schema.xml
<defaultSearchField>name</defaultSearchField>
solrconfig.xml
<requestHandler name="/select" class="solr.SearchHandler"> <lst name="defaults"> <str name="echoParams">explicit</str> <int name="rows">10</int> <str name="df">text</str> </lst> </requestHandler>
schema.xml中defaultSearchField和solrconfig.xml中df属性都是默认搜索字段的意思,不过后者只针对"/select"请求。优先级是solrconfig.xml的df高于schema.xml的defaultSearchField。
设置默认搜索字段的效果:搜索条件为 title:随意 问,中间的空格默认相当于OR,"text"优先于"name",因此搜索条件等价于 title:随意 OR text:问,所以会搜索不出结果。
建议解决方法:
方法1:可以将搜索条件变为 title:(随意 问),等价于 title:随意 OR title:问。
方法 2:搜索条件不变,查询时URL加上df参数"&df=title",也可以解决。
本文出自随意问技术百科:http://www.suiyiwen.com/question/4424 http://www.suiyiwen.com/question/4413