https://blog.csdn.net/wohaqiyi/article/details/78402262

solr可以实现多字段匹配查询的结果,即传入一个条件,可以按照你预选设置好的匹配范围去匹配数据,将匹配到的所有数据返回。
比如现在我有如下这样的需求:
  数据库中fbf表中有多个字段,其中有几个中文字段,现在要求传入汉字,对其中的四个中文字段进行全匹配。

solr的实现这种查询我用过的有两种:
第一种:配置的方式解决
1、首先找到我的solrHome下的fbf/conf下,然后找到manage-schema文件,添加一个字段:
<field name="zwpp" type="string" indexed="true" stored="true" multiValued="true"/>
1
  这个zwpp在数据库里是没有的,是我自己随便起的。注意multiValued="true",这个是必须要true。

2.然后在该文件下边再添加如下几行内容:
<copyField source="fbfmc" dest="zwpp"/>
<copyField source="fbfdz" dest="zwpp"/>
<copyField source="fbfdcy" dest="zwpp"/>
<copyField source="fbfdcjs" dest="zwpp"/>
1
2
3
4
  配置完上边这两个配置,然后reload这个core的配置文件,或者重启tomcat即可,然后重新创建一遍fbf的索引。查询后界面是这样的:

 

  也就是说这种配置会多创建一部分索引,将这4个字段联合起来创建了一个zwpp字段,这个新字段里同时包含这4个字段的值,这种创建索引的方法,我试过了,明显创建索引速度变慢,因为相当与多创建了些索引。

3.这样在查询的时候,就去查询zwpp这个字段,就会同时匹配到4个中文字段的值了。如下:

  这样就实现了只对zwpp一个字段传入查询条件,就实现了对多个字段查询的功能。
这种方式的缺点,我感觉对于solr创建索引的速度有影响,但是查询肯定会快。占用的空间也会大点。

第二种:代码的方式解决
1.这种方式应该是大家推崇的,就是查询的时候AND/OR拼接字符串即可。


2.这种查询最简单,也不用改什么solr的配置,而且也方便修改。
最后大家注意一下:<solrQueryParser defaultOperator="OR"/> 这个配置也是在manage-schema文件里,它的默认配置是OR,可以配置成AND。具体的不同我不明白。先到这里了。

posted on 2019-03-07 18:01  一天不进步,就是退步  阅读(394)  评论(0编辑  收藏  举报