solr7.4.0+mysql+solrj(簡而優美)

来源:https://www.cnblogs.com/leslia/archive/2018/08/27/9544202.html
-Advertisement-
Play Games

目錄: 1 solr7部署+創建核心2 solr mysql 連接 2.1 導入相關 jar包 2.2 配置連接信息 2.3 配置中文分析器3 solrj JAVA客戶端應用 3.1 solrj 構建和運行 3.2 solrj 應用(數據的 增、刪、改、查) 3.3 solrj JavaBean 整 ...


目錄:

1 solr7部署+創建核心
2 solr mysql 連接
 2.1 導入相關 jar包
 2.2 配置連接信息
 2.3 配置中文分析器
3 solrj JAVA客戶端應用
 3.1 solrj 構建和運行
 3.2 solrj 應用(數據的 增、刪、改、查)
 3.3 solrj JavaBean 整合應用


 

1 solr7部署+創建核心

solr7需要java8環境,且需要在環境變數中添加 JAVA_HOME變數。

solr有兩種啟動模式:

獨立模式:適用於數據規模不大的場景

雲模式:適用於數據規模大,高可靠、高可用、高併發的場景,基於zookeeper中間件

獨立模式是以 (core/核心) 來管理,雲模式是以(collection/集合)來管理。

本教程使用獨立模式,請到apache官網下載壓縮包windows版,solr-7.4.0.zip / 壓縮到本地

cd solr-7.4.0/bin/  常用命令:

 solr.cmd start    啟動 預設埠:8983

 solr.cmd stop -all  停止  

 solr.cmd create -c [options]  創建核心

 solr.cmd status 運行狀態

首先啟動solr  執行命令 solr.cmd start  併在瀏覽器下能訪問到下圖所示則表示訪問成功

 

 然後創建核心 ,這裡我的核心名字叫bless   solr.cmd start -c bless 。下圖表示創建成功

 

新創建core\核心的目錄位置

 


 

2 solr mysql 連接 

2.1 導入相關 jar包

2.1.1  下載 mysql 驅動包:mysql-connector-java-x.x.x.jar

2.1.2  將 mysql 驅動包導入 solr :將下載下來的 mysql-connector-java-x.x.x.jar 拷貝到 solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib 下;

2.1.3  將solr{home}\dist目錄下的:solr-dataimporthandler-7.4.0.jar和solr-dataimporthandler-extras-7.4.0.jar這兩個jar包拷貝到 solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib下

 

 

 

 

 

2.2 配置連接信息

把solr-7.4.0\example\example-DIH\solr\db下的文件複製到你創建的core裡面 --> solr-7.4.0\server\solr\bless

 

打開conf目錄在db-data-config.xml和managed-schema中進行配置

 

  我的資料庫表信息

 

db-data-config.xml配置資料庫連接信息

<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3307/leslia" user="root" password="root" />
    <document>
        <entity name="bless" query="select * from bless">
             <field column="bless_id"         name="id" />
             <field column="bless_content"     name="blessContent" />
             <field column="bless_time"     name="blessTime"/>
         </entity>
    </document>
</dataConfig>

 這個地方要註意一下 ,field主鍵必須設置為name="id",否則solr找不到主鍵會出現問題,為什麼?看一下managed-schema配置文件中的這個主鍵配置

 

 然後去managed-schema里配置對應的field欄位,這個也可以在管理端直接添加,也可以手動修改配置文件,name屬性要與db-data-config.xml 文件中name屬性一致

<field name="blessContent" type="text_general" indexed="true" stored="true"/>
<field name="blessTime" type="pdate" indexed="true" stored="true"/>

 

好了配置完畢。重啟solr,導入數據

查詢資料庫記錄是否導入

2.3 配置中文分析器

在solr-7.4.0/contrib/analysis-extras/lucene-libs下找到lucene-analyzers-smartcn-7.4.0.jar  copy 到 solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib

修改conf/managed-schema 添加如下配置信息,並重新啟動solr

<!-- ChineseAnalyzer -->
<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
    </analyzer>
</fieldType>

使用中文分析 

不使用中文分析

 

給資料庫欄位配置中文分析,需要修改managed-schema配置文件 type="text_ik",具體應用本教程不再涉及。

<field name="blessContent" type="text_ik" indexed="true" stored="true"/>
<field name="blessTime" type="pdate" indexed="true" stored="true"/>

 


 

3  solrj JAVA客戶端應用

solrJ是訪問Solr服務的JAVA客戶端,提供索引和搜索的請求方法,SolrJ通常嵌入在業務系統中,通過solrJ的API介面操作Solr服務。

示例數據還是應用上面mysql資料庫導入的

3.1 solrj 構建和運行

添加maven依賴

<dependency>
  <groupId>org.apache.solr</groupId>
  <artifactId>solr-solrj</artifactId>
  <version>7.4.0</version>
</dependency>

3.2 solrj 應用(數據的 增、刪、改、查)

獲取 HttpSolrClient 連接

    private static final String solrUrl="http://localhost:8983/solr/bless";

    //創建solrClient同時指定超時時間,不指定走預設配置
    private static HttpSolrClient client=new HttpSolrClient.Builder(solrUrl)
            .withConnectionTimeout(10000)
            .withSocketTimeout(60000).build();

 

3.2.1 solrj 查詢

    @Test
    public void querySolr() throws Exception{
        //封裝查詢參數
        SolrQuery query = new SolrQuery("*:*");
        //添加需要回顯得內容
        query.addField("id");
        query.addField("blessContent");
        query.addField("blessTime");
        query.setRows(20);//設置每頁顯示多少條
        //執行查詢返回QueryResponse
        QueryResponse response = client.query(query);
        //獲取doc文檔
        SolrDocumentList documents = response.getResults();
        for(SolrDocument solrDocument:documents){
            System.out.println(solrDocument.get("id"));
            System.out.println(solrDocument.get("blessContent"));
            System.out.println(solrDocument.get("blessTime"));
        }
        //關閉資源
        client.close();
    }

 測試信息

3.2.2 solrj 增加/修改     修改是id不變其他欄位變更

   @Test
    public void solrAdd() throws Exception{
        //創建文檔doc
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", 21);
        doc.addField("blessContent", "solrj add");
        doc.addField("blessTime",new Date());
        //添加到client
        UpdateResponse updateResponse = client.add(doc);
        //索引文檔必須commit
        client.commit();
    }

 在管理端查看一下剛纔添加的信息

 

 

 3.2.3 solrj 刪除  刪除有3種方式

   @Test
    public void solrDelete() throws Exception{
        //1 通過id 刪除
        client.deleteById("1");
        //2 通過id List 刪除
        ArrayList<String> ids = new ArrayList<String>();
        ids.add("2");
        ids.add("3");
        client.deleteById(ids);
        //3 通過 查詢信息刪除
        client.deleteByQuery("id:4");
        // 提交
        client.commit();
        // 關閉資源
        client.close();
    }

 3.3 solrj  javaBean 整合應用   

SolrJ支持通過@Field註解隱式轉換文檔與任何類每個實例變數在Java對象可以映射到一個相應的Solr欄位中,使用 field註解

solr的fieldtype屬性 javaBean 屬性類型
string String
boolean Boolean
pint Integer
pdouble Double
plong Long
pfloat Float
pdate Date

 

 

 

 

 

 

 

 

創建實體類:

public class Bless {

    @Field
    private String id;

    @Field
    private String blessContent;

    @Field
    private Date blessTime;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getBlessContent() {
        return blessContent;
    }

    public void setBlessContent(String blessContent) {
        this.blessContent = blessContent;
    }

    public Date getBlessTime() {
        return blessTime;
    }

    public void setBlessTime(Date blessTime) {
        this.blessTime = blessTime;
    }


}

 

3.3.1 solrj + javaBean 查詢

    @Test
    public void queryBean() throws Exception{
        SolrQuery query = new SolrQuery("*:*");
        //添加需要回顯得內容
        query.addField("id");
        query.addField("blessContent");
        query.addField("blessTime");
        query.setRows(20);//設置每頁顯示多少條
        //執行查詢返回QueryResponse
        QueryResponse response = client.query(query);
        //獲取doc文檔
        List<Bless> blessList=response.getBeans(Bless.class);
        for(Bless bless:blessList){
            System.out.println(bless.getId());
            System.out.println(bless.getBlessContent());
            System.out.println(bless.getBlessTime());
        }
        client.close();
    }

 

3.3.2 solrj + javaBean 增加

    @Test
    public void addBean() throws Exception{
        Bless bless=new Bless();
        bless.setId("19");
        bless.setBlessContent("solr java bean add");
        bless.setBlessTime(new Date());
        //添加對象
        UpdateResponse response = client.addBean(bless);
        //提交操作
        client.commit();
        //關閉資源
        client.close();
    }

 

至此,solr 簡單應用已經介紹完畢。本篇文章屬於簡單優美型,並未深入探索,希望能幫助到各位同學。如需幫助可在博客下方留言。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題意 給出$n$個矩形,找出一個點,使得至少在$n$個矩陣內 Sol 呵呵噠,昨天cf半夜場,一道全場切的題,我沒做出來。。不想找什麼理由,不會做就是不會做。。 一個很顯然的性質,如果存在一個點 / 矩形在$n - 1$個矩形內的話 它們的交集不會是空集。 然後我們去枚舉每個點,假設他不與$(n - ...
  • 1、Object 2、String 3、StringBuilder ...
  • 一、匿名函數 什麼匿名是函數: 不需要使用def函數名的函數或者子程式 函數語法: lambda 參數:表達式 函數特點: 1、lamdba只是一個表達式,省去定義函數過程,讓代碼更精簡 2、lamdba 在表達式中封裝的邏輯有限 3、不能訪問自己參數序列外或者全局命名空間的參數 舉例: 二、內建m ...
  • c/c++ 模板與STL小例子系列 自建Array數組 自建的Array數組,提供如下對外介面 | 方法 | 功能描述 | | | | | Array() | 無參數構造方法,構造元素個數為模板參數個的數組 | | Array(int length) | 有參數構造方法,構造元素個數為參數lengt ...
  • 對 Excel 進行讀寫操作是生產環境下常見的業務,網上搜索的實現方式都是基於POI和JXL第三方框架,但都不是很全面。小編由於這兩天剛好需要用到,於是就參考手寫了一個封裝操作工具,基本涵蓋了Excel表(分有表頭和無表頭)的創建,並對它們進行讀寫操作。為方便大家,有需要者可以點擊文後點解下載直接使 ...
  • 使用未封裝的方法連接資料庫 步驟: 一、確定連接方式(以SqlServer為例): ①Windows身份驗證。 ②SQLServer身份驗證方式(需要用戶名和密碼),資料庫用戶名和密碼每個人的都不同。 二、連接資料庫(SqlConnection) SqlConnection 表示到 SQL Serv ...
  • 一、下載: 中科大鏡像:http://mirrors.ustc.edu.cn/anaconda/archive/ 清華鏡像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 二、安裝: 預設就行,安裝路徑最好換一下 三、配置環境變數: 控制 ...
  • [TOC] 一、xhprof擴展安裝步驟 xhprof是PHP的一個擴展,廢話不多說,直奔正題。 1、安裝 PHP5版本的安裝 PHP7版本的安裝 下載源碼包 "xhprof" :https://github.com/rustjason/xhprof/tree/php7 2、修改php.ini配置文 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...