solrj管理索引庫
1.1. 什麼是solrJ
solrj是訪問Solr服務的java客戶端,提供索引和搜尋的請求方法,SolrJ通常在嵌入在業務系統中,通過SolrJ的API介面操作Solr服務,如下圖:
依賴的jar包:
程式碼實現:
使用solrj對索引新增、修改、刪除
package cn.itcast.solr; import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test; public class IndexManagerTest {
//新增、修改 @Test
public void testIndexCreate() throws Exception{
//建立和Solr服務端連線
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //建立solr文件物件
SolrInputDocument doc = new SolrInputDocument();
//域要先定義後使用,還有注意必須要有id主鍵域
//solr中沒有專用的修改方法, 會自動根據id進行查詢,如果找到了則刪除原來的將新的加入就是修改,如果沒找到,將新的直接加入則就是新增
doc.addField("id", "a001");
doc.addField("product_name", "檯燈1`111");
doc.addField("product_price", "12.5"); //將文件加入solrServer物件中
solrServer.add(doc); //提交
solrServer.commit();
} //刪除
@Test
public void testIndexDel() throws Exception{
//建立和Solr服務端連線
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //根據主鍵id進行刪除
//solrServer.deleteById("a001"); //根據查詢刪除,這裡是刪除所有*:*
solrServer.deleteByQuery("*:*");
//提交
solrServer.commit();
}
}
複雜查詢:其中包含查詢、過濾、分頁、排序、高亮顯示等處理
package cn.itcast.solr; import java.util.List;
import java.util.Map; import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.junit.Test; public class IndexSearchTest {
//查詢所有:
@Test
public void testIndexSearch1() throws Exception{
//連線solr服務端
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //建立solr查詢條件物件
SolrQuery solrQuery = new SolrQuery();
//查詢所有
solrQuery.setQuery("*:*"); //查詢並獲取查詢響應物件
QueryResponse queryResponse = solrServer.query(solrQuery);
//從查詢響應中獲取查詢結果集物件
SolrDocumentList results = queryResponse.getResults();
//列印一共查詢到多少條記錄,也就是記錄總數
System.out.println("=====count====" + results.getNumFound());
//遍歷查詢結果集
for(SolrDocument doc : results){
System.out.println("============="+doc.get("id"));
System.out.println("============="+doc.get("product_name"));
System.out.println("============="+doc.get("product_price"));
System.out.println("====================================================");
}
} //複雜查詢, @Test
public void testIndexSearch2() throws Exception{
//連線solr服務端
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //建立solr查詢條件物件
SolrQuery solrQuery = new SolrQuery();
//查詢關鍵字輸入
solrQuery.setQuery("檯燈");
//設定預設搜尋域
solrQuery.set("df", "product_keywords");
//設定過濾查詢
solrQuery.addFilterQuery("product_price:[1 TO 100]");
//設定排序,這裡是降序
solrQuery.setSort("product_price", ORDER.desc);
//=======設定分頁========
//設定起始條數
solrQuery.setStart(0);
//設定查詢多少條
solrQuery.setRows(50); //========設定高亮顯示=======
//高亮預設是關閉的,所以要手動開啟
solrQuery.setHighlight(true);
//設定需要高亮顯示的域
solrQuery.addHighlightField("product_name");
//設定高亮字首
solrQuery.setHighlightSimplePre("<span style=\"color:red\">");
//設定高亮字尾
solrQuery.setHighlightSimplePost("</span>"); //===================查詢並獲取查詢響應物件=====================================
QueryResponse queryResponse = solrServer.query(solrQuery);
//從查詢響應中獲取查詢結果集物件
SolrDocumentList results = queryResponse.getResults();
//列印一共查詢到多少條記錄,也就是記錄總數
System.out.println("=====count====" + results.getNumFound());
//遍歷查詢結果集
for(SolrDocument doc : results){
System.out.println("============="+doc.get("id"));
//獲取高亮
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
List<String> list = highlighting.get(doc.get("id")).get("product_name");
if(list != null && list.size() > 0){
String hlName = list.get(0);
System.out.println("=======high lighting=====" + hlName);
} System.out.println("============="+doc.get("product_name"));
System.out.println("============="+doc.get("product_price"));
System.out.println("====================================================");
}
}
}