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

来自随意问技术百科
跳转至: 导航搜索

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