分享知識-快樂自己:java程式碼 操作 solr
阿新 • • 發佈:2019-01-01
POM 檔案:
<!-- solr客戶端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3</version>
</dependency>
JAVA 程式碼:
package com.gdbd.solrj;
import org.apache.solr.client.solrj.SolrQuery;
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.apache.solr.common.SolrInputDocument;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
/**
* @Description: SolrJ 新增資料測試類
* @Author: DGBD
* @CreateDate: 2018/12/31 15:57
* @UpdateUser: yc
* @UpdateDate: 2018/12/31 15:57
* @UpdateRemark: 修改內容
* @部落格地址: https://www.cnblogs.com/mlq2017/
* @Version: 1.0
*/
public class TestSolrJ {
public static void main(String[] args) {
try {
do {
System.out.println("....請選擇你的操作....");
System.out.println("1):向 solr 索引庫新增資料");
System.out.println("2):查詢 solr 索引庫資料");
System.out.println("3):修改 solr 索引庫資料");
System.out.println("4):刪除 solr 索引庫資料");
System.out.println("5):根據 查詢 刪除 solr 索引庫資料");
System.out.println("請輸入....");
Scanner input = new Scanner(System.in);
int num = input.nextInt();
switch (num) {
case 1:
testAddDocument();
break;
case 2:
testselDocument();
break;
case 3:
break;
case 4:
testdelDocument();
break;
case 5:
testdelQueryDocument();
break;
}
} while (true);
} catch (Exception e) {
e.printStackTrace();
}
}
/***
* 向 solr 索引庫新增資料
* @throws Exception
*/
public static void testAddDocument() throws Exception {
//01、建立一個 SolrServer 物件。建立一個 HTTPSolrServer物件。需要指定 solr 服務的 url
SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
//02、建立一個文件物件SolrInputDocument
SolrInputDocument document = new SolrInputDocument();
//03、向文件中新增域,必須有 id 域,域的名稱必須在 schema.xml
document.addField("id", "123");
document.addField("item_title", "測試商品標題2");
document.addField("item_sell_point", "測試商品買點2");
document.addField("item_price", 1000);
document.addField("item_image", "測試商品圖片2");
document.addField("item_category_name", "測試商品分類名稱2");
document.addField("item_desc", "測試商品描述2");
SolrInputDocument document1 = new SolrInputDocument();
//03、向文件中新增域,必須有 id 域,域的名稱必須在 schema.xml
document1.addField("id", "test001");
document1.addField("item_title", "測試商品標題1");
document1.addField("item_sell_point", "測試商品買點1");
document1.addField("item_price", 1000);
document1.addField("item_image", "測試商品圖片1");
document1.addField("item_category_name", "測試商品分類名稱1");
document1.addField("item_desc", "測試商品描述1");
//04、把文件物件寫入索引庫
solrServer.add(document);
solrServer.add(document1);
solrServer.commit();
System.out.println("成功插入...............................");
}
/***
* 查詢 solr 索引庫資料
*
* 提示:查詢所有(*:*)不能設定高亮顯示
* 分頁不設定預設為(0-10)
* 如果查詢條件上沒有指定在哪一個 業務域上搜索 則在預設搜尋域中搜索
*
* @throws Exception
*/
public static void testselDocument() throws Exception {
//01、建立一個 SolrServer 物件。建立一個 HTTPSolrServer物件。需要指定 solr 服務的 url
SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
//02、建立一個 solrQuery 查詢物件
SolrQuery solrQuery = new SolrQuery();
//設定查詢條件:過濾條件、分頁條件...
solrQuery.set("q", "手機");
//solrQuery.setQuery("*:*");
//分頁條件(從第 30 條開始查詢,每頁顯示10 條)
solrQuery.set("start", 0);//solrQuery.setStart();
solrQuery.set("rows", 5);//solrQuery.setRows();
//預設搜尋域
solrQuery.set("df", "item_keywords");
//設定高亮
solrQuery.set("hl", true);//solrQuery.setHighlight(true);
//設定高亮顯示域(對哪一個域進行 高亮顯示:這裡設定標題域為高亮)
solrQuery.set("hl.fl", "item_title");//solrQuery.addHighlightField("item_title");
//高亮顯示字首字尾
solrQuery.set("hl.simple.pre", "<em>");//solrQuery.setHighlightSimplePre("<em>");
solrQuery.set("hl.simple.post", "</em>");//solrQuery.setHighlightSimplePost("</em>");
//03、執行查詢(得到一個 Response 物件)
QueryResponse response = solrServer.query(solrQuery);
//04、取查詢結果
SolrDocumentList results = response.getResults();
//05、取查詢總記錄數
System.out.println("取查詢總記錄數:>>>>" + results.getNumFound());
for (SolrDocument item : results) {
System.out.println(item.get("id"));
//06、取高亮顯示
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> list = highlighting.get(item.get("id")).get("item_title");
String title = "";
if (list != null && list.size() > 0) {
title = list.get(0);//獲取高亮的資訊
} else {
title = (String) item.get("item_title");//沒有高亮資訊 則顯示預設的
}
System.out.println(title);
System.out.println(item.get("item_sell_point"));
System.out.println(item.get("item_price"));
System.out.println(item.get("item_image"));
System.out.println(item.get("item_category_name"));
System.out.println(item.get("item_desc"));
System.out.println("===========================================");
}
}
/***
* 修改 solr 索引庫資料
* @throws Exception
*/
public static void testmodfyDocument() throws Exception {
}
/***
* 根據 Id 刪除 solr 索引庫資料
* @throws Exception
*/
public static void testdelDocument() throws Exception {
//01、建立一個 SolrServer 物件。建立一個 HTTPSolrServer物件。需要指定 solr 服務的 url
SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
//根據 Id 刪除 solr 中的資料
solrServer.deleteById("test001");
solrServer.commit();
}
/***
* 根據 查詢 刪除 solr 索引庫資料
* @throws Exception
*/
public static void testdelQueryDocument() throws Exception {
//01、建立一個 SolrServer 物件。建立一個 HTTPSolrServer物件。需要指定 solr 服務的 url
SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
//根據 Id 刪除 solr 中的資料
solrServer.deleteByQuery("*:*");
solrServer.commit();
}
}