您的位置:首页 > 其它

solr cloud系列-solrj的使用

2017-03-03 14:22 302 查看
这篇文章来介绍一下solr的java   api(solrJ)的使用方式,,主要是链接的建立和增删改查。

1.maven依赖,我这里使用的solrj6.1.0版本
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>${solr.version}</version>
</dependency>

2.创建查询的链接,下边代码是创建zk链接的代码

public class SolrCloudClient {

private static final Logger log = LogManager.getLogger();
private final static String zkHost="192.168.1.50:2181,192.168.1.51:2181,192.168.1.52:2181";

public static SolrClient getZkSolrClient() {
log.info("连接solr cloud,zkhost={} ", zkHost);
SolrClient solr = new CloudSolrClient.Builder().withZkHost(zkHost).build();
return solr;
}

}

3.几种经常使用的查询方式

获取链接

private static SolrClient solrClient=SolrCloudClient.getZkSolrClient();

SolrQuery query = new SolrQuery();

(1)  q条件查询方式,查询字段。

query.setQuery("id:100001");

如果想在q查询中多条件查询,需要用AND 把查询条件分割开,一定是大写的 AND

query.setQuery("id:100001 and name=某某");

(2)  fq查询方式,辅助查询,是指在q查询结果中同时符合fq的查询条件,可以设置多个。

query.addFilterQuery("provinceCode:"+provinceCode); 

query.addFilterQuery("cityCode:"+cityCode); 

fq的查询方式还可以写成1行,

query.addFilterQuery("provinceCode:1000 AND cityCode:1002"); 

fq的两种写法都回返回相同的结果,但是solr查询运算的过程不过,第一种是加载了2次filterQuery来进行运算,这样需要多进行一次交集运算。

第二种方式是一次计算fq的值,但是比较耗内存,这个要看大家的选择,后续会讲下solr优化。

(3) 分页查询,solr里是用start和rows来实现分页的

query.setStart(0);

query.setRows(10);

(4)  设置需要返回的字段和查询的集合

query.setFilterQueries("id,name");
query.set("collection","student")

(5)  设置排序的字段,用id正序排序

import  org.apache.solr.client.solrj.SolrQuery.ORDER

query.setSort("id", ORDER.asc.reverse());

(6)  查询并返回json数据,也可以返回bean类,看自己的选择

QueryResponse response=solrClient.query(query);

SolrDocumentList  list=response.getResults();

JSONArray arrJson = new JSONArray();

for(SolrDocument document:list){

arrJson.add(document);

}

return arrJson.toJSONString();

这里简单介绍了下solrj简单查询的方式,后面再介绍facet查询方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  solr cloud