1. 程式人生 > >solr cloud系列-solrj的使用

solr cloud系列-solrj的使用

這篇文章來介紹一下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查詢方式。