Solr的學習總結一
阿新 • • 發佈:2019-02-10
心語:因為以前一直接觸的都是關係型資料庫,所有在接觸到這些nosql的時候確實不太適應。在公司有經常的用到。這個學習起來並不困難,但為了以後的複習。我決定還是寫下自己學習的一些技巧和心得
Solr的環境配置
查詢引數
基本查詢
Solr的檢索運算子
當然了這些概念性的東西肯定是要看的 solr 查詢引數
solr在Java中的應用
當然了這部分才是重點,因為在實際的開發中我們只要求會用,至於其他的可以慢慢在學
- solr的連線
//指定solr伺服器地址
private final static String SOLR_URL = "http://172.16.0.104:13087/solr/fuzzyQySRCdoc_shard12_replica2" ;
//建立solrClient物件
public static HttpSolrClient solrClient() {
HttpSolrClient solrClient = new HttpSolrClient(SOLR_URL);
return solrClient;
}
- 通過指定欄位查詢,並以JsonArray形式返回
public JSONArray solrInfo(List<String> readIDs ) throws IOException, SolrServerException {
JSONArray listInfo = new JSONArray();
//得到solr連線
HttpSolrClient solrClient = EntityListInfo.solrClient();
SolrQuery solrQuery = new SolrQuery();
//遍歷ids集合
for (String id : readIDs) {
solrQuery.set("q", "entitys_id:" + "\"" + id + "\"");
QueryResponse response = solrClient.query(solrQuery);
SolrDocumentList documentList = response.getResults();
for (SolrDocument document : documentList) {
//將document轉成json
Set<Map.Entry<String, Object>> entrySet = document.entrySet();
JSONObject object = new JSONObject();
for (Map.Entry<String, Object> objectEntry : entrySet) {
if (objectEntry.getKey().equals("_version")) {
continue;
}
object.put(objectEntry.getKey(), objectEntry.getValue());
}
listInfo.add(object);
//System.out.println(document.toString().replace("SolrDocument",""));
break;
}
}
return listInfo;
}
細心的可以看出將document的遍歷很像map的遍歷,不太熟的可以map的四種遍歷方式
- solr分頁查詢並將得到的資訊儲存到文字中
//通過id去找到solr的doc_id
public void solrDocId() throws IOException, SolrServerException {
//得到需要的所有id
List<String> readIDs = readIDs();
HttpSolrClient solrClient = EntityListInfo.solrClient();
SolrQuery solrQuery = new SolrQuery();
for (String id : readIDs) {
System.out.println(id);
long start = 0;
long rows = 500;
while (true) {
try {
ModifiableSolrParams params = new ModifiableSolrParams();
params.add("q", "*:*");
params.add("fq", "entity_ids:" + "\"" + id + "\"");
params.add("start", String.valueOf(start));
params.add("rows", String.valueOf(rows));
QueryResponse queryResponse = solrClient.query(params);
if (queryResponse == null) {
continue;
}
SolrDocumentList solrDocuments = queryResponse.getResults();
//獲取總數,可以在solr admin裡面檢視
long docNumbers = solrDocuments.getNumFound();
if (solrDocuments.isEmpty()) {
break;
}
// 插入solr資料到文字
for (SolrDocument document : solrDocuments) {
Set<Map.Entry<String, Object>> entrySet = document.entrySet();
JSONObject object = new JSONObject();
for (Map.Entry<String, Object> objectEntry : entrySet) {
if (objectEntry.getKey().equals("_version")) {
continue;
}
object.put(objectEntry.getKey(), objectEntry.getValue());
}
writeInfo("F:\\info\\doc_id.txt", object);
System.out.println(document.get("doc_id"));
//listInfo.add(object);
}
//確定分頁結束的條件
if (start + rows >= docNumbers) {
break;
} else {
start = start + rows;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return;
}
總結:像solr的增刪改這裡就沒有提到,可以參考SOLR CRUD操作
當然了最好的還是去菜鳥裡面先有個大概的瞭解