这篇文章来介绍一下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();
如果想在q查询中多条件查询,需要用AND 把查询条件分割开,一定是大写的 AND
query.setQuery("id:100001 and name=某某");
query.addFilterQuery("cityCode:"+cityCode);
fq的查询方式还可以写成1行,
query.addFilterQuery("provinceCode:1000 AND cityCode:1002");
fq的两种写法都回返回相同的结果,但是solr查询运算的过程不过,第一种是加载了2次filterQuery来进行运算,这样需要多进行一次交集运算。
第二种方式是一次计算fq的值,但是比较耗内存,这个要看大家的选择,后续会讲下solr优化。
这里简单介绍了下solrj简单查询的方式,后面再介绍facet查询方式。
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查询方式。