solr4.0+IKAnalyzer 中文搜索,无法查询到结果的解决方法

来源:互联网 发布:古天乐李泽楷关系 知乎 编辑:程序博客网 时间:2024/04/30 03:13

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 

原创粉丝点击