1. 程式人生 > >solr 文檔二

solr 文檔二

ports 搭建 搜索 art jpg 技術分享 4.2 驗證 body


SOLR 5.5.5文檔

參考博文:

http://blog.csdn.net/matthewei6/article/details/50620600

作者:毛平

時間:2018年1月15日 17:36:22

環境搭建

solr版本5.5.5,可以獨立部署,使用默認的Jetty啟動。

1. 準備條件

環境:JDK需要1.7以上,最好是1.8

下載軟件包:

使用清華大學的鏡像包:

https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/5.5.5/solr-5.5.5.tgz

命令:curl https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/5.5.5/solr-5.5.5.tgz

或者wget https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/5.5.5/solr-5.5.5.tgz

2. 解壓

tar -zxvf solr-5.5.5.tgz

3. 啟動服務器

bin/solr start

SOLR初級

1. 創建core

說明:本文是基於容器jetty,創建core相當於創建容器中的新項目。一個獨立的搜索引擎項目。

bin/solr create -c maopcore

bin/solr delete -c maopcore -------刪除已創建的core

2. 添加中文分次器

說明:基於剛才新建的core,添加ik分詞器。使core具備中文分詞的功能。

1. 修改配置文件

managed-schema(相對路徑為:${PATH}\server\solr\mycore\conf\managed-schema) 添加下面的內容:

<!-- 中文分詞 -->

<fieldType name="text_ik" class="solr.TextField">

<analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>

<analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>

</fieldType>

2. 添加ik分詞器的jar

需要確保jar和solr的版本一致

安裝路徑為${PATH}\server\solr-webapp\webapp\WEB-INF\lib。

技術分享圖片

3. 驗證ik安裝正確

技術分享圖片

4. 查看分詞效果

(可以看到,新建的core已經具備分詞功能)。

技術分享圖片

3. 添加數據庫連接

說明:參考http://blog.csdn.net/u011518678/article/details/51871925

1. 創建連接配置data-config

配置當前core的數據連接的配置文件。在路徑{當前core}/conf 下創建data-config.xml文件。內容為

<dataConfig>

<dataSource name="testSource1" driver="oracle.jdbc.driver.OracleDriver"

url="jdbc:oracle:thin:@192.168.4.229:1521:orcl" password="hermes" user="hermes_rc" />

<document>

<entity name="goods1" pk="BID" transformer="DateFormatTransformer" dataSource="testSource1"

query="select id,name,url,price,to_date(to_char(addtime,‘yyyy-MM-dd HH24:mi:ss‘),‘yyyy-MM-dd HH24:mi:ss‘) addtime from lksolrtest"

deltaQuery="select id BID from lksolrtest where to_char(addtime,‘yyyy-MM-dd HH24:mi:ss‘)>‘${dataimporter.last_index_time}‘"

deltaImportQuery="select id,name,url,price,to_date(to_char(addtime,‘yyyy-MM-dd HH24:mi:ss‘),‘yyyy-MM-dd HH24:mi:ss‘) addtime from lksolrtest where id = ‘${dataimporter.delta.BID}‘">

<field column="BID" name="id"/>

<field column="price" name="price" />

<field column="name" name="name" />

<field column="url" name="url" />

<field column="addtime" name="addtime" dateTimeFormat="yyyy-MM-dd HH24:mi:ss" />

</entity>

</document>

</dataConfig>

文本如下圖:

技術分享圖片

2. 添加數據庫連接jar

本例子使用的oracle數據庫,路徑{solr絕對路徑}\server\solr-webapp\webapp\WEB-INF\lib

3. 關聯data-config

在{solr絕對路徑}\server\solr\{#core}\conf\solrconfig.xml對應位置添加

<lib dir="./lib" regex=".*\.jar" />

<requestHandler name="/dataimport" class="solr.DataImportHandler">

<lst name="defaults">

<str name="config">data-config.xml</str>

</lst>

</requestHandler>

接著註釋掉下面的內容,防止id默認為String類型

<!--

<searchComponent name="elevator" class="solr.QueryElevationComponent" >

<str name="queryFieldType">string</str>

<str name="config-file">elevate.xml</str>

</searchComponent>

-->

4. 域和數據庫字段對應關系

配置文件的路徑{core絕對路徑}\conf\managed-schema

<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />

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

<field name="price" type = "float" indexed="true" stored="true" />

<field name="url" type = "text_ik" indexed="true" stored="true" />

<field name="addtime" type = "date" indexed="true" stored="true" />

<uniqueKey>id</uniqueKey>

5. 索引數據導入jar

添加依賴jar(solr-dataimporthandler-5.5.5.jar、solr-dataimporthandler-extras-5.5.5.jar、mydataimportscheduler.jar,其中前兩個jar在solr的\dist,my….jar在需要單獨找) {相對路徑}\solr-5.5.5\server\solr-webapp\webapp\WEB-INF\lib下

6. 手動驗證導入索引

1. 如下選中core(項目),dataImport(索引導入),索引更新方式(此處為全量更新),選擇實體,點擊執行。

技術分享圖片

2. 界面查詢

選擇core,query菜單,點擊查詢,得到剛才導入的索引數據

技術分享圖片

7. 配置entry詳解
4. 動態索引導入

說明:solr是一個web項目,在webapp下的web.xml文件中添加監控器,啟動定時周期任務。調用增量的索引生成函數。索引動態的添加入庫。

1. 調整時區為北京

說明:Solr默認時區為世界時區UTC,需要修改為GMT+08:00(北京時區)

在{solr}/bin/solr.in.cmd文件中,找到SOLR_TIMEZONE的設置行,修改為

set SOLR_TIMEZONE=GMT+08:00

2. 添加監控器配置

說明:添加監聽器,ApplicationListener為mydataimportscheduler.jar中的類。他會自動調用配置文件{solr}\server\solr\ conf\ dataimport.properties。會啟動兩個定時任務。Timer-0和timer-1.其中timer-0負責增量定時任務的調用。Timer-1負責定時全量數據的調用。

在{solr絕對路徑}\server\solr-webapp\webapp\WEB-INF\web.xml文件中添加監聽器

<listener>

<listener-class>

org.apache.solr.handler.dataimport.scheduler.ApplicationListener

</listener-class>

</listener>

3. 創建定時任務配置文件

說明:文件中有定時的全量更新配置,也有定時增量配置。真正使用選取其中一種即可。監控器調用當前配置文件。

在\server\solr\下創建文件夾conf,並創建dataimport.properties,內容如下:

#################################################

# #

# dataimport scheduler properties #

# #

#################################################

# to sync or not to sync

# 1 - active; anything else - inactive

syncEnabled=1

# which cores to schedule

# in a multi-core environment you can decide which cores you want syncronized

# leave empty or comment it out if using single-core deployment

#syncCores=liukuncore,liukuncore1

syncCores=maopcore001

# solr server name or IP address

# [defaults to localhost if empty]

server=localhost

# solr server port

# [defaults to 80 if empty]

port=8983

# application name/context

# [defaults to current ServletContextListener‘s context (app) name]

webapp=solr

# URL params [mandatory]

# remainder of URL

#params=/deltaimport?command=delta-import&clean=false&commit=true

params=/dataimport?command=delta-import&clean=false&commit=true

# schedule interval

# number of minutes between two runs

# [defaults to 30 if empty]

interval=1

# 重做索引的時間間隔,單位分鐘,默認1440,即1天;

# 為空,為0,或者註釋掉:表示永不重做索引

reBuildIndexInterval=1440

# 重做索引的參數

#reBuildIndexParams=/deltaimport?command=full-import&clean=true&commit=true

reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true

# 重做索引時間間隔的計時開始時間,第一次真正執行的時間#=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;

# 兩種格式:2012-04-11 03:10:00 或者 03:10:00,後一種會自動補全日期部分為服務啟動時的日期

reBuildIndexBeginTime=2018-01-14 15:14:00

4. 配置文件參數詳解

syncCores:調用的currentCore,如果是多個core,使用逗號隔開

server: 服務ip或者名稱,例如:localhost

port: 服務端口

增量配置參數:

Params: 增量url

Interval: 增量時間間隔(單位:分鐘)

全量配置參數:

reBuildIndexParams: 全量url

reBuildIndexInterval:全量時間間隔(單位:分鐘)

reBuildIndexBeginTime:全量第一次執行開始時間

5. 數據節點詳解

說明:數據索引導入需要配置數據節點。

比如:

技術分享圖片

配置節點包含dataSource和document節點。

dataSource是數據庫的配置。關註的主要有url,user,password。

1. query是獲取全部數據的SQL(全量更新的sql)

2. deltaImportQuery是獲取增量數據時使用的SQL

3. deltaQuery是獲取增量pk的SQL

技術分享圖片

4. parentDeltaQuery是獲取父Entity的pk的SQL

SOLR 中級

多表關聯

Full Import工作原理
執行本Entity的Query,獲取所有數據;
針對每個行數據Row,獲取pk,組裝子Entity的Query;
執行子Entity的Query,獲取子Entity的數據。
Delta Import工作原理
查找子Entity,直到沒有為止;
執行Entity的deltaQuery,獲取變化數據的pk;
合並子Entity parentDeltaQuery得到的pk;
針對每一個pk Row,組裝父Entity的parentDeltaQuery;
執行parentDeltaQuery,獲取父Entity的pk;
執行deltaImportQuery,獲取自身的數據;
如果沒有deltaImportQuery,就組裝Query
限制
子Entity的query必須引用父Entity的pk
子Entity的parentDeltaQuery必須引用自己的pk
子Entity的parentDeltaQuery必須返回父Entity的pk
deltaImportQuery引用的必須是自己的pk

文件索引

solr 文檔二