solr查询进阶

1、摘要
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-serviceAPI接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Java中,我们只要使用Apache提供的 Solrj 这个工具,导入相关包,调用其 API 就可以对 solr 进行操作了。
一般的查询只要按solr的语法拼写查询语句,如:name:张三,调用查询接口即可,下面介绍几个高级的查询接口相关使用方法。
 
2、创建SolrCloudsolrj server

SolrCloud是基于SolrZookeeper的分布式搜索方案,从Solr4.0开始包含在其中。获取非分布式solrj server 与获取分布式集群,即SolrCloud的不同,非分布式方式中获取需要用到的连接信息是solr服务的IP及端口,而在SolrCloud下需要用到的连接信息ZookeeperIP和端口,如:


3facet查询

Facet查询意为面查询,是solr中实现分组统计的工具。比如,需要查询“手机”,并根据品牌统计出各有多少个查询结果:三星(100),苹果(10),诺基亚(100)。此时,就可以用到facet查询。

 
solr有几种facet:
A、普通facet,比如上面所举例子;
B、查询facet,比如根据价格查询时,将根据价格,设置多个区间,比如0-1010-2020-30等;
C、日期facet,也是一种特殊的范围查询,比如按照月份进行facet
Facet接口使用方法:


这样就做成了一个简单facet,调用之后,它就会给你返回一个xml格式的内容,你可以调用solrJAPI来取得相应的内容。
4group by
group by,与数据库中的意义一样,也是进行分组查询,但与上面讲到的facet查询不同,facet查询与group by的区别在于:facet的查询结果主要是分组信息:有什么分组,每个分组包括多少记录;但是分组中有哪些数据是不可知道的,只有进一步搜索;group则类似于关系数据库的group by,可以用于一个或者几个字段去重、显示一个group的前几条记录等。
 
Group by接口使用方法:

同样,调用之后,它就会给你返回一个xml格式的内容,你可以调用solrJAPI来取得相应的内容。
 
5、自定义权重排序
Solr的查询结果中,默认以score值排序,scoresolr中的一个系统字段,存放该查询结果的评分结果,solr中有一个已经十分好的评分公式,但不一定符合某些比较特殊的业务需求,此时就需要对评分过程进行干预。
当查询结果排序中需要排除频率影响,如查询:name:手机电池,如果不排除频率的影响,“手机手机手机”会比“手机电池”排得更前,但这不是我们期望的结果。要排除频率的影响,可以自定义自己的评分器:
然后,修改solr默认的Similarity类。在solr 的配置文件schemal.xml,最后中修改或增加:<similarity class="com.MySolrSimilarity"/>,设置为自定义的评分器,重启solr服务后,自定义的评分器就生效了。
 
也可以通过在查询语句中设置权重干预评分,例如:有字段titlecontent,查询关键字:“手机”和“电脑”,需要查询titlecontent包含任一关键字的结果;title包含“手机”权重为100,包含“电脑”权重为1content包含“手机”权重为1,包含“电脑”权重为100,则查询语句可以写成:
title:手机^100 电脑^1 OR content:手机^1 电脑^100
 
具体的评分详细信息,可以通过solr服务的查询界面中获取,只要勾选debugQuery选项开启debug模式即可。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章