solrj的使用和开发总结

来源:互联网 发布:linux重定向 编辑:程序博客网 时间:2024/05/16 10:08

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);//返回的facetPivotquResp.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
一般情况下使用[]设置范围,而[]表示的是闭区间,也就是包含端点值。
如果不希望包含端点值,就需要用到开区间,用大括号来限定{}。

0 0