solr查询进阶

1、摘要
Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service API 接口。用户可以通过 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-10 10-20 20-30 等;
C 、日期 facet ,也是一种特殊的范围查询,比如按照月份进行 facet
Facet 接口使用方法:


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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值