【solr 學習一】7.31版本window系統全程安裝搭建,包括常用查詢,solr多條件查詢、排序,配置數據庫,定時同步,全量與增量更新,使用solrJ在進行增刪改查

前言:由於項目最近在做淘寶客商品信息查詢這一塊,做搜索引擎,離不開全文搜索服務器,我這裏選擇了solr。solr的好處可以自行百科,這裏主要是講解技術。這篇文章主要講解window的安裝和使用。若大家感興趣或者項目用到,希望你能跟着我的步驟進行下去,如果遇到問題,可以後續看下我在最底下的問題講解,或者留言。
注意:7.3.1版本是需要jdk1.8以上的,我這邊的數據庫是Oracle數據庫,建議用Oracle數據庫。
我把我配置的文件,分享在羣裏,這樣大夥也有個參考!
One:搭建solr服務器前,一定要看下我要講解的步驟(考試重點,圈起來 _):
1–下載運行
2–創建核心core
3–添加中文分詞器
4–配置managed-schema 設置其中文分詞器
5–導入3個jar包到web-inf下的lib
6–配置solrconfig.xml,配置內容是數據庫文件所在位置
7–同級目錄下,創建data-config.xml文件 裏面內容主要是數據庫賬號密碼,還有全量、增量更新相關的sql信息
8–配置完後,要記得配置managed-schema中的數據庫列和名稱的映射關係
9–solrJ在java上的操作了。
一、下載運行solr:
下載地址:http://lucene.apache.org/solr/
直接點擊右上角的download,跳到如下頁面:
點擊該鏈接即可去下載入口
這裏寫圖片描述
推薦下載最新版的7.3.1.zip版本的。因爲本教程就是用7.3.1的。
下載後放到E盤(放在哪個盤都行,推薦跟我放在E盤,這樣後續有相關路徑就比較好參考了)然後解壓,解壓後進入solr的bin目錄,在空白處shift+鼠標右鍵,進入dos窗口:
這裏寫圖片描述
輸入solr.cmd start 然後敲回車,就可以啓動solr了。默認端口爲:8983
這裏寫圖片描述
在瀏覽器輸入localhost:8983/solr,就可以看到solr已經啓動了
這裏寫圖片描述

二、創建核心core:所謂的core,其實就是類似於在一個大酒店裏,開一個房間,用來堆放東西的情景。也就是說,創建core就是在solr服務器中開闢一個小小的存儲空間,用來放數據的。如果還不明白,不必要弄清楚,等你熟悉了回過頭想一下就知道了。請繼續往下跟我進行操作:
1.在剛剛打開的窗口,輸入 solr.cmd create -c myCore
此處注意:myCore是自己自定義的,你也可以叫youCore xxCore 或者就叫Tom都行。我這裏用myCore 建議跟我一樣做:

創建好了後,刷新頁面,在圖中下拉框就可以看到你創建的Core了。如果看不到,在dos窗口輸入 solr.cmd -p 8983 restart 重啓solr即可
這裏寫圖片描述
點擊myCore 就可以看到如下信息:這些信息包含了分詞器,還有數據導入,數據查詢等功能。
這裏寫圖片描述
同時,你還可以進入E:\solr-7.3.1\server\solr\myCore 看到你創建的core 該文件夾中有conf文件夾,用來放置該core的配置文件,包括數據庫信息,數據查詢語句,均可以在這些配置文件中進行操作,後續會講解,請跟我繼續往下:
這裏寫圖片描述
三、前兩步啓動solr和創建core後,這一步配置中文分詞器:

  1. 添加中文分詞插件:solr 7.3.1中自帶中文分詞插件,將solr-7.3.1\contrib\analysis-extras\lucene-libs\lucene-analyzers-smartcn-7.3.1.jar 複製到 solr-7.3.1\server\solr-webapp\webapp\WEB-INF\lib 目錄中
    這裏寫圖片描述
    這裏寫圖片描述
  2. 配置中文分詞,修改 solr-7.3.1\server\solr\myCore**【這個myCore是剛剛創建的core名稱】**\conf\managed-schema文件,添加中文分詞
    打開這個文件後,搜索 Italian,在Italian下添加我們的中文配置(複製粘貼即可):
<!-- 配置中文分詞器-->  
   <fieldType name="text_cn" 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>  

這裏寫圖片描述

這裏寫圖片描述

dos窗口輸入solr.cmd -p 8983 restart 重啓solr服務器 如果這條命令報錯,直接關閉窗口,重新啓動solr即可。

  • 刷新solr地址,測試solr中文分詞器是否正確:
    這裏寫圖片描述

4.出現如下分詞效果證明配置成功!
這裏寫圖片描述
四、數據操作。 前面幾步 基本配置好solr以及中文分詞器了,但solr的主要核心還是數據,所以第四步驟開始,講解如何通過配置文件的方式,獲取數據庫的數據,並導入solr。

  • 第四點主要內容:a-連接數據庫 b-設置數據庫列名和solr數據名稱的對應關係 c-設置全量和增量更新的SQL語句

首先:想要通過配置文件連接數據庫,就要有數據庫驅動,我這裏用的是Oracle。相關文件我放在羣裏,到時候去下載即可。除了數據庫驅動,還需要solr自帶的兩個jar文件,這兩個jar文件主要是用來把數據庫數據導入solr服務器的,都在該目錄下:
E:\solr-7.3.1\dist
名稱分別爲:
solr-dataimporthandler-7.3.1.jar
solr-dataimporthandler-extras-7.3.1.jar
同時,在羣或網上下載 :
一共三個jar包,都複製粘貼到 E:\solr-7.3.1\server\solr-webapp\webapp\WEB-INF\lib
這裏寫圖片描述

其次:
進入E:\solr-7.3.1\server\solr\myCore\conf 找到solrconfig.xml 文件,打開,

這裏寫圖片描述
複製以下代碼到該文件下:

 <!--數據庫配置 -->
 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
    <lst name="defaults">  
          <str name="config">data-config.xml</str>  
    </lst>  
</requestHandler> 

這裏寫圖片描述
保存後,在同級目錄下,創建data-config.xml文件,該文件主要是配置數據庫和配置SQL語句的:
這裏寫圖片描述
該文件內容如下:

<dataConfig>
<!--JdbcDataSource這個名稱建議不要變!-->
    <dataSource type="JdbcDataSource"     
          driver="oracle.jdbc.driver.OracleDriver"     
          url="jdbc:oracle:thin:@//localhost:1521/orcl"
          user="root"     
          password="root"/>
    <document>
	<!-- 設置全量導入商品庫-->
        <entity dataSource="JdbcDataSource" name="import170data"  
        query="SELECT T.ID,T.TITLE,T.PIC,T.ORG_PRICE,T.PRICE,T.IS_TMALL,T.SALES_NUM,T.COMMISSION_JIHUA,T.COMMISSION_QUEQIAO,T.COMMISSION,T.TB_GOODS_ID,T.QUAN_PRICE,T.CREATE_TIME,T.CID  FROM T_TBK_GOODS T " 
		pk="ID" deltaQuery="SELECT T.id  FROM T_TBK_GOODS T WHERE  T.CREATE_TIME  &gt; (SELECT TO_DATE('${dataimporter.import170data.last_index_time}','yyyy/MM/dd HH24:mi:ss') +8/24 next_hour from dual) OR T.UPDATE_TIME &gt; (SELECT TO_DATE('${dataimporter.import170data.last_index_time}','yyyy/MM/dd HH24:mi:ss') +8/24 next_hour from dual)" 
		deltaImportQuery="SELECT T.ID,T.TITLE,T.PIC,T.ORG_PRICE,T.PRICE,T.IS_TMALL,T.SALES_NUM,T.COMMISSION_JIHUA,T.COMMISSION_QUEQIAO,T.COMMISSION,T.TB_GOODS_ID,T.QUAN_PRICE  FROM T_TBK_GOODS T WHERE T.ID='${dih.delta.ID}'"
		deletedPkQuery="SELECT ID FROM T_TBK_GOODS WHERE QUAN_TIME &lt; SYSDATE"
		>
		
    		<field column="ID" name="id"></field>
            <field column="TITLE" name="goodsTitle"></field> 
            <field column="PIC" name="pic"></field> 
            <field column="ORG_PRICE" name="orgPrice"></field>
            <field column="IS_TMALL" name="isTmall"></field>
            <field column="SALES_NUM" name="salesNum"></field>
            <field column="COMMISSION_JIHUA" name="commissionJihua"></field>
            <field column="COMMISSION_QUEQIAO" name="commissionQueqiao"></field>
			<field column="COMMISSION" name="commission"></field>
			<field column="TB_GOODS_ID" name="tbGoodsId"></field>
			<field column="PRICE" name="price"></field>
			<field column="QUAN_PRICE" name="quanPrice"></field>
			<field column="CREATE_TIME" name="creatTime"></field>
			<field column="CID" name="cId"></field>
        </entity>
	
    </document>
  </dataConfig>

稍微解釋下:
標籤內的內容,需要根據自己的數據庫進行配置就行了。
entity dataSource=“JdbcDataSource” 的‘’dataSource‘’屬性,跟dataSource type=“JdbcDataSource” 的type屬性對應。
query:query的語句,是全量導入的語句 也就是後續再頁面上點擊全量導入時,執行的是該語句;
deltaQuery:deltaQuery是查詢增量id的語句,該語句需要制定一個id,該id一般是指主鍵,通常與managed-schema文件中的 id對應起來,該語句的作用是,查詢到solr服務器和數據庫不一致的數據,進行增量操作。我這裏是用數據庫數據創建的時間,和上次導入的時間進行對比,如果數據庫有新的時間,那麼就認爲該id是新插入數據庫的,這樣後續增量更新到solr服務器就可以達到同步的狀態了。
deltaImportQuery:增量導入語句,該語句會根據deltaQuery查詢到id值,將數據庫的數據更新到solr的。
這裏寫圖片描述
deletedPkQuery:deletedPkQuery語句是刪除語句,solr會根據該語句查詢到的id值,把solr服務器的響應數據進行刪除!
“${ dataimporter.import170data.last_index_time}”:該參數是指最近一次把數據庫數據導入到solr服務器的時間。import170data是entity的名,只有一個entity時,該名可以刪除。
${dih.delta.ID} 這個是索引。直接用即可。

五、配置managed-schema中的數據庫列和名稱的映射關係。
將下列代碼複製到managed-schema中:

  <field name="commission" type="plongs" />
  <field name="commissionJihua" type="plongs"/>
  <field name="commissionQueqiao" type="plongs"/>
  <field name="goodsTitle" type="text_general" indexed="true"  required="true" stored="true"/>
  <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
  <field name="isTmall" type="plongs"/>
  <field name="orgPrice" type="plongs"/>
  <field name="quanPrice" type="plongs"/>
  <field name="pic" type="text_general"/>
  <field name="price" type="plongs"/>
  <field name="salesNum" type="plongs"/>
  <field name="tbGoodsId" type="plongs" indexed="true" required="true" stored="true"/>
  <field name="creatTime" type="pdate" />
  <field name="cId" type="string" indexed="true"  stored="true"/>

這裏寫圖片描述

六、至此,相關配置已經處理完成啦!下面開始導入數據:
去solr-7.3.1/bin下啓動solr:
這裏寫圖片描述

在瀏覽器輸入 localhost:8983/solr 進入後,找到自己的core 然後根據下圖進行數據導入:
這裏寫圖片描述
點擊左邊的query 就可以查詢看看是否有數據導入了
這裏寫圖片描述
增量導入:
這裏寫圖片描述

至此,solr服務器的安裝,數據庫配置,全量,增量更新已經處理完成。接下來的文章,會講解用solrJ 在java代碼中,進行定時同步,還有增刪改查.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章