1. 程式人生 > >分享知識-快樂自己:java程式碼 操作 solr

分享知識-快樂自己:java程式碼 操作 solr

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(); } }