solr分词查询研究

1         实验

1.1  准备

分词字段:/CaseInfo/案/@DocContent
分词器:IKAnalyzer2012
测试关键字:抢劫黄金
返回字段:/CaseInfo/案/@DocContent

分别插入3条数据,向DocContent插入不同的值

1.2  测试

1、  查询条件:*:*
查询结果如下:

 

2、查询条件:\/CaseInfo/案/@DocContent:抢劫黄金
查询结果如下:


3、查询条件:\/CaseInfo/案/@DocContent:"抢劫黄金"
注意:抢劫黄金加了引号。
查询结果如下:

4、查询条件:\/CaseInfo/案/@DocContent:抢劫 AND \/CaseInfo/案/@DocContent:黄金
查询结果如下:


5、查询条件:\/CaseInfo/案/@DocContent:抢劫 OR \/CaseInfo/案/@DocContent:黄金
查询结果如下:


6、查询条件:\/CaseInfo/案/@DocContent:抢劫 黄金
注意:抢劫与黄金中间添加空格
查询结果为空:


1.3  结果分析

由于查询结果与solr解析的查询语句有关,勾选界面左下角的debugQuery,可以得到对应parsedquery_toString值,如下表:

根据上表可以得到下面的分析结果

1.3.1        *:*

 查询语句表示查询全部数据。

1.3.2        \/CaseInfo/案/@DocContent:抢劫黄金

表示查询的DocContent字段经过分词后,必须包含“抢劫”且包含“黄金”。parsedquery_toString值中“+”表示存在操作符,要求符号“+”后面的项必须在字段中存在。经过第一张表分词结果,两条数据满足要求。

a)         抢劫黄金

b)        黄金不要抢劫

1.3.3        \/CaseInfo/案/@DocContent:"抢劫黄金"

加了双引号表示完全匹配,表示查询的DocContent字段经过分词后,必须包含“抢劫黄金”,经过第一张表分词结果,一条数据满足要求。

a)         抢劫黄金

1.3.4        \/CaseInfo/案/@DocContent:抢劫 AND  \/CaseInfo/案/@DocContent:黄金

AND表示既满足左条件又满足右条件。DocContent字段经过分词后,既要包含“抢劫”且包含“黄金”。两条数据满足要求。

a)         抢劫黄金

b)        黄金不要抢劫

 

1.3.5        \/CaseInfo/案/@DocContent:抢劫 OR \/CaseInfo/案/@DocContent:黄金

OR表示或者,满足一个条件就可以。DocContent字段经过分词后,包含“抢劫”或包含“黄金”。三条数据满足要求。三条结果:

a)         抢劫黄金

b)        黄金不要抢劫

c)         太阳黄太阳金抢劫

1.3.6        \/CaseInfo/案/@DocContent:抢劫 黄金

这里查询结果为空。分析parsedquery_toString值:

+/CaseInfo//@DocContent:抢劫 +(+text: +text:)

表示DocContent字段分词后必须包含“抢劫”,并且text字段必须包含“黄”与“金”才能满足条件。由于我们没有想text字段赋值,所以下旬结果为空。为什么会有text字段的呢?

schema.xml中

<!--<defaultSearchField>text</defaultSearchField> -->

在solrconfig.xml中

 <requestHandler name="/select" class="solr.SearchHandler">

    <!-- default values for query parameters can be specified, these

         will be overridden by parameters in the request

      -->

     <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属性都是默认搜索字段的意思(注意:defaultSearchField默认是被注释的),优先级是solrconfig.xml的df高于schema.xml中的defaultSearchField

设置默认字段的效果,搜索条件为 \/CaseInfo/案/@DocContent:抢劫 黄金,中间的空格相当于AND,因此搜索条件等价于 \/CaseInfo/案/@DocContent:抢劫AND text:黄金 ,所以不会搜索岛结果。

解决方法:

方法1:可以把条件变为 \/CaseInfo/案/@DocContent:(抢劫 黄金)

方法2:搜索条件不变,查询时URL加上df字段值为/CaseInfo/案/@DocContent即可。

 

 

 

 

 

转载于:https://my.oschina.net/u/2293326/blog/808155

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值