solrj是一个API,java通过特定的方法可以连接到solr与solr的互动。:
solrj的使用步骤
solrj的facet
solrj查询日期时间
solrj的使用步骤
1、先导包
对于maven工程,直接将下面内容加入到pom文件中即可:
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<!-- 对于版本号可以自己定义 -->
<version>6.2.1</version>
</dependency>
非maven工程,可在solr安装目录下找到所有需要的jar包:
2、创建solrclient
3、有了solrclient之后,我们可以通过创建SolrQuery来拼接solr的查询参数,并且提交。
SolrQuery query = new SolrQuery();
4、Solr的一些查询参数对应
query.setQuery(“查询字符串”)也可以使用query.set(“q”, “查询字符串”)他们是等效的。
下面的二行也是等效的
query.set("fl", "category,title,price");
query.setFields("category", "title", "price")
5、提交查询
//提交查询
QueryResponse quResp = solr.query(query);
//返回的facetPivot
quResp.getFacetPivot();
//返回的结果集
quResp.getResults();
//返回的数量
quResp.getResults().getNumFound();
solrj的facet
facet的查询
进行facet查询需要在请求参数中加入“facet=on”或者“facet=true只有这样facet组件才起作用
facet的参数见solr官方wiki http://wiki.apache.org/solr/SimpleFacetParameters
1.facet.field 分组的字段
2. facet.pivot 按照多个维度进行分组查询
3.facet.prefix 表示Facet字段前缀
4.facet.limit Facet字段返回条数(不设置默认返回一百以内,设置为-1,返回条数不限制)
5.facet.offict 开始条数,偏移量,它与facet.limit配合使用可以达到分页的效果
6.facet.mincount Facet字段最小count,默认为0
7.facet.missing 如果为on或true,那么将统计那些Facet字段值为null的记录
8.facet.method 取值为enum或fc,默认为fc, fc表示Field Cache
9.facet.enum.cache.minDf 当facet.method=enum时,参数起作用,文档内出现某个关键字的最少次数
facet.field
如果需要对多个字段进行facet查询,可以将该参数声明多次:
http://10.47.12.142:8983/solr/test/select?q=*:*&facet.field=che_brand&facet.pivot=che_factory,che_brand &facet=on
等效于:
SolrQuery query = new SolrQuery();
query.set(“q”,”*:*”);
query.set(“facet.field”,” che_brand”);
query.set(“facet.pivot”,” che_factory,che_brand”);
query.set(“facet”,”on”);
XML代码 结果如下:
<lst name="facet_fields">
<lst name="che_factory">
<int name="上汽通用">94071</int>
<int name="上汽大众">76042</int>
<int name="一汽大众">38590</int>
<int name="东风本田">10657</int>
</lst>
<lst name="che_brand">
<int name="大众">70595</int>
<int name="别克">41825</int>
<int name="D-大众">31512</int>
<int name="D-帝豪">416</int>
</lst>
</lst>
各个facet字段互不影响,且可以针对每个facet字段设置查询参数。
f.字段名。参数名=参数值
http://10.47.12.142:8983/solr/test/select?q=*:*&facet.field=che_factory&facet=on&f.che_factory.facet.prefix=上汽通用
结果:
<lst name="facet_fields">
<lst name="che_factory">
<int name="上汽通用">94071</int>
<int name="上汽通用五菱">4114</int>
</lst>
</lst>
facet.pivot
http://10.47.12.143:8983/solr/lincai/select?q=*:*&facet.pivot=lin_store_area,lin_factory,lin_brand&facet=on
XML代码结果如下:
前台展现结果:
solrj查询日期时间
timestamp:[* TO *]//时间不限制
timestamp:[2016-02-07T15:21Z TO *] //从2016-02-7 15:21开始
timestamp:[2016-02-07T15:21Z T2017-02-07T15:21Z]//2016-02-7 15:21到2017-02-7 15:21
一般情况下使用[]设置范围,而[]表示的是闭区间,也就是包含端点值。
如果不希望包含端点值,就需要用到开区间,用大括号来限定{}。