solr可以实现多字段匹配查询的结果,即传入一个条件,可以按照你预选设置好的匹配范围去匹配数据,将匹配到的所有数据返回。
比如现在我有如下这样的需求:
数据库中fbf表中有多个字段,其中有几个中文字段,现在要求传入汉字,对其中的四个中文字段进行全匹配。
solr的实现这种查询我用过的有两种:
第一种:配置的方式解决
1、首先找到我的solrHome下的fbf/conf下,然后找到manage-schema文件,添加一个字段:
<field name="zwpp" type="string" indexed="true" stored="true" multiValued="true"/>
这个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"/>
配置完上边这两个配置,然后reload这个core的配置文件,或者重启tomcat即可,然后重新创建一遍fbf的索引。查询后界面是这样的:
也就是说这种配置会多创建一部分索引,将这4个字段联合起来创建了一个zwpp字段,这个新字段里同时包含这4个字段的值,这种创建索引的方法,我试过了,明显创建索引速度变慢,因为相当与多创建了些索引。
3.这样在查询的时候,就去查询zwpp这个字段,就会同时匹配到4个中文字段的值了。如下:
这样就实现了只对zwpp一个字段传入查询条件,就实现了对多个字段查询的功能。
这种方式的缺点,我感觉对于solr创建索引的速度有影响,但是查询肯定会快。占用的空间也会大点。
第二种:代码的方式解决
1.这种方式应该是大家推崇的,就是查询的时候AND/OR拼接字符串即可。
2.这种查询最简单,也不用改什么solr的配置,而且也方便修改。
最后大家注意一下:<solrQueryParser defaultOperator="OR"/>
这个配置也是在manage-schema文件里,它的默认配置是OR,可以配置成AND。具体的不同我不明白。先到这里了。