1. 程式人生 > >Java 對 solr 的增刪改查,java原始碼

Java 對 solr 的增刪改查,java原始碼

solr 安裝配置完成後,如何在java程式碼中應用起來呢。

首先我們先建立一個類 solrUtils.java

//                         _ooOoo_  
//                        o8888888o  
//                        88" . "88  
//                        (| -_- |)  
//                         O\ = /O  
//                     ____/`---'\____  
//                   .   ' \\| |// `.  
//                    / \\||| : |||// \  
//                  / _||||| -:- |||||- \  
//                    | | \\\ - /// | |  
//                  | \_| ''\---/'' | |  
//                   \ .-\__ `-` ___/-. /  
//                ___`. .' /--.--\ `. . __  
//             ."" '< `.___\_<|>_/___.' >'"".  
//            | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//              \ \ `-. \_ __\ /__ _/ .-` / /  
//      ======`-.____`-.___\_____/___.-`____.-'======  
//                         `=---='  
//
//      .............................................  
//               佛祖保佑             永無BUG 
//       佛曰:  
//               寫字樓裡寫字間,寫字間里程序員;  
//               程式人員寫程式,又拿程式換酒錢。  
//               酒醒只在網上坐,酒醉還來網下眠;  
//               酒醉酒醒日復日,網上網下年復年。  
//               但願老死電腦間,不願鞠躬老闆前;  
//               賓士寶馬貴者趣,公交自行程式設計師。  
//               別人笑我忒瘋癲,我笑自己命太賤;  
//               不見滿街漂亮妹,哪個歸得程式設計師? 
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
 
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;
 
import com.jfinal.kit.PropKit;
import com.sunjs.kit.ToolsUtils;
import com.sunjs.model.TBlogArticle;
 
public class SolrUtils {
     
    protected static final Logger LOG = Logger.getLogger(SolrUtils.class);
 
    private final static String BASE_URL = "http://localhost:8983/solr/sunjs";
 
    /**
     * 建立SolrServer物件
     * 
     * 該物件有兩個可以使用,都是執行緒安全的 1、CommonsHttpSolrServer:啟動web伺服器使用的,通過http請求的 2、
     * EmbeddedSolrServer:內嵌式的,匯入solr的jar包就可以使用了 3、solr
     * 4.0之後好像添加了不少東西,其中CommonsHttpSolrServer這個類改名為HttpSolrClient
     * 
     * @return
     */
    public static SolrClient createSolrServer() {
        return new HttpSolrClient.Builder(BASE_URL).build();
    }
 
    public static Integer addDucument(TBlogArticle article) {
        if(article==null){
            return 30850;
        }
        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
 
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", article.getLong("id"));
        doc.addField("category_id", article.getLong("category_id"));
        doc.addField("uuid", article.getStr("uuid"));
        doc.addField("visit_num", article.getInt("visit_num"));
        doc.addField("pic_url", article.getStr("pic_url"));
        doc.addField("author", article.getStr("author"));
        doc.addField("tags", article.getStr("tags"));
        doc.addField("tags_name", article.getStr("tags_name"));
        doc.addField("title", article.getStr("title"));
        doc.addField("digest", article.getStr("digest"));
        doc.addField("add_time", article.getDate("add_time"));
        docs.add(doc);
        SolrClient solrClient = createSolrServer();
        try {
            solrClient.add(docs);
            UpdateResponse rspcommit = solrClient.commit();
            return rspcommit.getStatus()==0?30800:30850;
        } catch (Exception e) {
            e.printStackTrace();
            LOG.info(ToolsUtils.print("solr","索引失敗", article.getStr("title"), e.getMessage()));
        } finally{
            try {
                LOG.info(ToolsUtils.print("solr","索引成功", article.getStr("title")));
                solrClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return 30850;
    }
     
    public static Integer deleteById(Object id) {
        if(id!=null && StringUtils.isEmpty(id+"")){
            return 30892;
        }
        SolrClient solrClient = createSolrServer();
        try {
            if(id.equals("*")){
                //刪除所有
                // Preparing the Solr document
                solrClient.deleteByQuery("*");
                UpdateResponse rspcommit = solrClient.commit();
                return rspcommit.getStatus()==0?30891:30892;
            }else{
                solrClient.deleteById(id+"");
                UpdateResponse rspcommit = solrClient.commit();
                return rspcommit.getStatus()==0?30891:30892;
            }
        } catch (SolrServerException | IOException e) {
            e.printStackTrace();
            LOG.info(ToolsUtils.print("solr","刪除索引失敗", "ID:"+id, e.getMessage()));
        } finally{
            try {
                LOG.info(ToolsUtils.print("solr","刪除索引成功", "ID:"+id));
                solrClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return 30892;
    }
 
}
public static Page<TBlogArticle> queryFromSolr(Integer pageNumber, Integer pageSize, String reqparam) {
        Page<TBlogArticle> page = new Page<TBlogArticle>();
        if(StringUtils.isEmpty(reqparam)){
            reqparam="*";
        }
 
        SolrQuery query = new SolrQuery();
        query.setHighlight(true);
        query.addHighlightField("digest");
        query.addHighlightField("title");
        query.setHighlightSimplePre("<font color=\"red\">");
        query.setHighlightSimplePost("</font>");
//        query.setHighlightSnippets(1);
//        query.setHighlightFragsize(2);
        query.setStart((pageNumber-1)*pageSize);
        query.setRows(pageSize);
        query.set("q", "title:"+reqparam+" OR "+"digest:"+reqparam);
        List<TBlogArticle> articles = new ArrayList<TBlogArticle>();
        SolrClient solrClient = createSolrServer();
        try {
            QueryResponse response = solrClient.query(query);
            SolrDocumentList docList = response.getResults();
            Map<String, Map<String, List<String>>> highlightMap = response.getHighlighting();
             
            Iterator<SolrDocument> it = docList.iterator();
            while (it.hasNext()) {
                SolrDocument doc = it.next();
                Long id = Long.valueOf(doc.getFieldValue("id").toString());
                Long category_id = Long.valueOf(doc.getFieldValue("category_id")==null?"0":doc.getFieldValue("category_id").toString());
                Integer visit_num = Integer.valueOf(doc.getFieldValue("visit_num")==null?"0":doc.getFieldValue("visit_num").toString());
                String uuid = doc.getFieldValue("uuid")==null?null:doc.getFieldValue("uuid").toString();
                String pic_url = doc.getFieldValue("pic_url")==null?null:doc.getFieldValue("pic_url").toString();
                String author = doc.getFieldValue("author")==null?null:doc.getFieldValue("author").toString();
                String tags = doc.getFieldValue("tags")==null?null:doc.getFieldValue("tags").toString();
                String tags_name = doc.getFieldValue("tags_name")==null?null:doc.getFieldValue("tags_name").toString();
                String title = doc.getFieldValue("title")==null?null:doc.getFieldValue("title").toString();
                String digest = doc.getFieldValue("digest")==null?null:doc.getFieldValue("digest").toString();
                Date add_time = (Date)doc.getFieldValue("add_time");
                 
                TBlogArticle article = new TBlogArticle();
                article.set("id", id);
                article.set("category_id", category_id);
                article.set("uuid", uuid);
                article.set("visit_num", visit_num);
                article.set("pic_url", pic_url);
                article.set("author", author);
                article.set("tags", tags);
                article.put("tags_name", tags_name);
                article.set("title", title);
                article.set("digest", digest);
                article.put("title_html", title);
                article.put("digest_html", digest);
                article.set("add_time", add_time);
                 
                List<String> titleList=highlightMap.get(id+"").get("title");
                List<String> digestList=highlightMap.get(id+"").get("digest");
                //獲取並設定高亮的欄位title
                if(titleList!=null && titleList.size()>0){
                    article.put("title_html", titleList.get(0));
                }
                //獲取並設定高亮的欄位content
                if(digestList!=null && digestList.size()>0){
                    article.put("digest_html", digestList.get(0));
                }
                articles.add(article);
            }
            Integer totalRow = Integer.valueOf(docList.getNumFound()+"");
            Integer totalPage = (int) (totalRow % pageSize == 0 ? totalRow / pageSize : Math.ceil((double)totalRow / (double)pageSize)) ;
            page = new Page<TBlogArticle>(articles, pageNumber, pageSize, totalPage, totalRow);
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                solrClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return page;
    }

上邊可能有部分類報異常,不過都無關緊要,主要程式碼都在。

如果查詢出來的欄位:doc.getFieldValue 是一個數組,也就是多列。那麼只需要在配置檔案中操作一下即可:

進入 /Users/sun/Documents/solr-6.5.1/server/solr/my_core/conf 這個目錄下,開啟managed-schema

找到是陣列的列,比如是add_time:

<field name="add_time" type="tdates" multiValued="false"/>

增加 multiValued="false" 即可!

如何想要刪除全部索引

SolrUtils.deleteById("*");
刪除執行id 為 1 的索引

SolrUtils.deleteById(1);


相關推薦

Java solr刪改java原始碼

solr 安裝配置完成後,如何在java程式碼中應用起來呢。首先我們先建立一個類 solrUtils.java//                         _ooOoo_   //                        o8888888o   //      

Java資料庫刪改操作

基於前面練習所出現的問題對其進行修改,可以成功的對資料庫資訊進行增刪改查四項基本操作。 以下是部分修改的程式碼,整體的程式碼詳見前天的練習2。初始介面就不說了。 首先來到初始介面,點選瀏覽,會出現資料庫的資訊。 前面所出現的問題是,點選瀏覽之後,不斷的重複出現資訊新

(一)solr 7.31版本window系統全程安裝搭建涵蓋專案用到的大部分配置常用查詢solr多條件查詢、排序配置資料庫定時同步全量與增量更新使用solrJ在java程式進行刪改

前言:由於專案最近在做淘寶客商品資訊查詢這一塊,做搜尋引擎,離不開全文搜尋伺服器,我這裡選擇了solr。solr的好處可以自行百科,這裡主要是講解技術。這篇文章主要講解window的安裝和使用。若大家感興趣或者專案用到,希望你能跟著我的步驟進行下去,如果遇到問題,可以後續看下我在最底下的問題

Java操作Hbase進行建表、刪表以及資料進行刪改條件查詢

1、搭建環境   新建JAVA專案,新增的包有:    有關Hadoop的hadoop-core-0.20.204.0.jar    有關Hbase的hbase-0.90.4.jar、hbase-0.90.4-tests.jar以及Hbase資源包中li

mysql資料庫的簡單刪改合併欄位拼接字元操作java完成將一張表中的查詢結果合併存入另一張表的指定欄位

首先問題描述:我現在有兩個表,一個表是關鍵詞,一個表是含有關鍵詞的標籤,需要做的就是在關鍵詞表中新建一個標籤欄位,把包含該關鍵詞的全部標籤存入其中。比如關鍵詞是Java,標籤可能有Java開發,Java後臺等。我這裡關鍵詞有4000個,標籤有40000個,我用了小段java程式碼+sql的函式就完成

Java Maven專案:spring boot + Mybatis連線MySQL通用mapper的刪改對映實現多表查詢

1. MySQL自帶庫test新增表user、role 角色表role 使用者表user 2. 新增依賴,配置屬性 相關依賴:百度即可,此處略 application.properties spring.application.name=clean-exe

java 順序表實現刪改合併排序功能

  /**   * @param args   */    public int []data;  public int yupeijie_length;  final int Maxsize=1024;  public yupeijie_Seq(){   data=new int[1024];   this

Java之Elasticsearch 刪改

exc tin rgs its ack 端口 try on() TE <!--ELK --> <dependency> <groupId>org.elasticsearch.client</groupId>

asp.net core webapi 使用ef mysql進行刪改並生成Docker鏡像構建容器運行

rri put void userdata pro ext 代理 cte 成功 1.構建運行mysql容器,添加數據庫user 參考Docker創建運行多個mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html

java中編寫刪改

按照圖書資料庫來說 //查詢 :查詢的返回值有兩種型別,如果返回的資料你不確定是一條還是多條就返回一個List集合。如果你確定資料返回的是一條,可以把返回值換成Book實體型別。public List<Book> selectAll(){//引數看你是否用的到,這裡沒有傳//1.寫sql語句St

Java --學生作業系統-刪改

準備四個class Student.java: package cn.demo.d1029.anli; /** * 學生類 * @author Frank * */ public class Student { public int sid;//學號 public Stri

java DMO及刪改程式碼的自動生成

之前我考慮過多種自動生成程式碼的提供方式,比如web的方式,通過在頁面文字框裡面輸入各種引數,比如模板檔案地址,生成檔案地址,資料庫名,資料庫使用者名稱和密碼等,點選生成按鈕就可以生成原始碼檔案。但這樣需要部署啟動這個web程式。使用java的圖形使用者介面,但我對java圖形的相關API並不瞭解,

java實現elasticsearch刪改方法

這篇文章旨在是幫助新接觸elasticsearch的同學快速上手es,儘早的為團隊貢獻自己的力量。 (一)往es中增加資料 import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.

Java陣列的刪改操作

import java.util.Scanner; public class Array { /* * 增刪改查 * */ /** * 根據下標查詢元素 * * @param arr * @param index * @return 整型元素 * @autho

平衡二叉樹建立及其刪改JAVA

平衡二叉樹:指的是左右子樹高度差的絕對值不超過一的二叉排序樹。 主要思路:1、用左高度跟右高度代替平衡因子,大於1進行L~調整,小於-1進行R~調整                   2、每次插入都通過遞迴計算一次各結點高度,然後進行旋轉調整            

MongoDB(六)java操作mongodb刪改

    java操作mysql資料庫的程式碼我們已經瞭如指掌了,增刪改查,java對mongodb資料庫也是類似的操作,先是資料庫連線,再是進行操作。     首先我們進入進入admin資料庫,然後建立自己的資料庫testMongoDb,進入admin資料庫後,就可以直

Java操作MongoDB刪改工具Demo

——因為實習工作需要,在學MongoDB,參考了公司的一個MongDB服務類,寫了一個整合的Demo,涉及到的大部分的增刪改查操作,而且還算規範,給大家參考!原始碼:(完整專案檔案下載連結:點選開啟連結)http://download.csdn.net/detail/zha

基於MongoDB資料庫的Java程式實現刪改功能

今天我來說一下使用Java程式去實現MongoDB資料庫的增刪改查功能。 首先需要匯入連線資料庫的jar包,需要的話這是連結:http://pan.baidu.com/s/1eSDytAM,把jar包

Java 連線 Mongodb 刪改操作

對於NoSQL並沒有一個明確的範圍和定義,但是他們都普遍存在下面一些共同特徵: 不需要預定義模式:不需要事先定義資料模式,預定義表結構。資料中的每條記錄都可能有不同的屬性和格式。當插入資料時,並不需要預先定義它們的模式。 無共享架構:相對於將所有資料儲存的儲

Java 操作MongoDb 刪改

注:此文基於mongoDb API 3.2.0進行的測試。 測試程式碼如下: pom.xml檔案 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/200