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


目錄:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM