solr連線資料庫配置

石曼迪發表於2014-11-30

一般要搜尋的資訊都是被儲存在資料庫裡面的,但是我們不能直接搜資料庫,所以只有藉助Solr將要搜尋的資訊在搜尋伺服器上進行索引,然後在客戶端供客戶使用。

一、連結資料庫

1. SQL配置

拿SQL Server 為例,需要先下載Sql Server的jar包,下載地址:

http://msdn.microsoft.com/en-us/data/aa937724.aspx

解壓縮之後將sqljdbc4.jar複製到webapps\solr\WEB-INF\lib下,也就是本例的:

D:\apache-tomcat-7.0.57\webapps\solr\WEB-INF\lib

2. 建立查詢

然後在D:\apache-tomcat-7.0.57\webapps\solr\solr_home\collection1\conf下面新建一個配置檔案:data-config.xml

然後在本目錄下編輯配置檔案:solrconfig.xml

找到很多個requestHandler節點,在最下面增加:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
    <lst name="defaults"> 
          <str name="config">D:\apache-tomcat-7.0.57\webapps\solr\solr_home\collection1\conf\data-config.xml</str> 
    </lst> 
</requestHandler>

要配置的內容就是剛才新建檔案的路徑。

3. 將初次下載的solr-4.10.2資料夾下的dist, contrib資料夾複製到TomCat根目錄下:

wpsE71C.tmp

4. 然後再次修改剛才編輯過的solrconfig.xml增加兩個資料夾的配置並修改一些引數:

大約在75行預設有8個路徑,但是路徑不一定全對,順著這個配置的路徑去找資料夾,根據查詢的層數修改這個路徑配置,另增加一個新的配置,全文如下:

  <lib dir="D:\apache-tomcat\contrib\extraction\lib" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-cell-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\contrib\clustering\lib\" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-clustering-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\contrib\langid\lib\" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-langid-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\contrib\velocity\lib" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-velocity-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-dataimporthandler-\d.*\.jar" />

這個配置是根據本機推匯出來的,大家根據自己的實際情況去修改。

5. 將dist資料夾下的

wpsE71D.tmp

複製到webapps\solr\WEB-INF\lib下。

6. 然後編輯

D:\apache-tomcat-7.0.57\webapps\solr\solr_home\collection1\conf\data-confing.xml檔案,以本機MyBookShop資料庫的Books表為例

wpsE71E.tmp

配置如下:

<?xml version="1.0" encoding="UTF8"?> 
<dataConfig>
    <dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;DatabaseName=MyBookShop" user="sa" password="111"/>
    <document name="Info" pk="id">
        <entity name="zpxx"  transformer="ClobTransformer" pk="id"
                 query="SELECT  [ID],[Title] as name  FROM [MyBookShop].[dbo].[Books]"       
                 deltaImportQuery="SELECT  [Id],[Title] as name  FROM [MyBookShop].[dbo].[Books] where [PublishDate] > '${dataimporter.last_index_time}'"   
                 deltaQuery="SELECT  id FROM [MyBookShop].[dbo].[Books] where [PublishDate] > '${dataimporter.last_index_time}'">            
                    <field column="id"      name="id"      /> 
                    <field column="name"      name="name"      /> 
         </entity>
    </document>
</dataConfig>

此配置千萬注意。

上述配置說明如下:

     query是獲取全部資料的SQL(solr從sql中獲取那些資料),多列

     deltaImportQuery是獲取增量資料時使用的SQL(資料庫新增資料追加到solr的資料),多列

     deltaQuery是獲取pk的SQL(資料庫新增資料是,追加到solr的資料時的條件,根據id ,條件是最後一次獲取的時間,${dataimporter.last_index_time,最後獲取的時間}),一列

如需配置多列,步驟如:

1.先配置資料庫查詢資訊data config:

        <entity name="zpxx"  transformer="ClobTransformer" pk="id"
                 query="SELECT [ProductID] as ID,[ShopProductTitle] as title1,[SecondTitle] as title2,[ShopProductDescription] as descr  FROM [dbo].[ShopProduct]"       
                 deltaImportQuery="SELECT [ProductID] as ID,[ShopProductTitle] as title1,[SecondTitle] as title2,[ShopProductDescription] as descr  FROM [dbo].[ShopProduct] where [PublishDate] > '${dataimporter.last_index_time}'"   
                 deltaQuery="SELECT [ProductID] as ID FROM [dbo].[ShopProduct] where [PublishDate] > '${dataimporter.last_index_time}'">            
                <field column="id"      name="id"      /> 
		<field column="title1"      name="title1"      /> 
		<field column="title2"      name="title2"      /> 
                <field column="descr"      name="descr"      /> 
         </entity>

 2. 配置schema資訊(約120多行處):

   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
        
   <field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
   <field name="title1" type="text_ik" indexed="true" stored="true"/>
   <field name="title2" type="text_ik" indexed="true" stored="true"/>
   <field name="descr" type="text_ik" indexed="true" stored="true"/>
   <field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>

 

 

 這樣查處的結果就如:

    "docs": [
      {
        "title1": "櫻桃",
        "title2": "櫻桃櫻桃",
        "id": "1004",
        "descr": "<img alt=\"\" src=\"9f531.jpg\"><img alt=\"\" src=\"5.jpg\">",
        "_version_": 1503960451691577300
      },

 

保證SQL SERVER配置了外網訪問即可。

配置到此基本結束。

二、建立索引

啟動Solr,刪除全部索引資料:

http://localhost:8080/solr/update/?stream.body=<delete><query>*:*</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true

停掉Solr,檢查下是不是清空了:

wpsE71F.tmp

開始建立新的索引,瀏覽器執行方式:

終止跑索引:http://localhost:8080/solr/collection1/dataimport?command=abort

開始索引:http://localhost:8080/solr/collection1/dataimport?command=full-import

增量索引 :http://localhost:8080/solr/collection1/dataimport?command=delta-import

建議學習時使用UI的方式進行更新,能看清執行過程:

wpsE730.tmp

需要等執行結束,可以點選【Refrush status】看結果:

Indexing completed. Added/Updated: 1076 documents. Deleted 0 documents. (Duration: 03s)

表示結束。

然後點選左邊的查詢檢驗索引結果:

wpsE741.tmp

出現查詢結果表示建立成功。

三、更新索引、增加索引、刪除索引

1. 更新資料:

我們先來搜尋一個關鍵字“土豆”,這裡全是計算機圖書,不應該有土豆的。

wpsE742.tmp

然後將其中一個書籍的標題更新為“論土豆的栽培技術”

wpsE752.tmp

不更新索引是搜不到的。

wpsE753.tmp

執行增量更新:

http://localhost:8080/solr/dataimport?command=delta-import&clean=false&commit=true

然後去查詢:

wpsE754.tmp

已經可以查詢得到了。

2. 新增一個資料:“論蘋果的藝術”

insert into [MyBookShop].[dbo].[Books]

(

[Title]
,[Author]
,[PublishDate]
,[WordsCount]
,[UnitPrice]
,[ContentDescription]
,[AurhorDescription]
,[EditorComment]
,[TOC]
)
SELECT '論蘋果的藝術'
,[Author]
,[PublishDate]
,[WordsCount]
,[UnitPrice]
,[ContentDescription]
,[AurhorDescription]
,[EditorComment]
,[TOC]
FROM [MyBookShop].[dbo].[Books] where id=4942

新增結果如下: 

wpsE765.tmp

然後執行增量索引:

http://localhost:8080/solr/dataimport?command=delta-import&clean=false&commit=true

再查詢:

wpsE766.tmp

發現新結果被查詢出來了。

3. 刪除資料

  將蘋果這條資料刪除掉,仍然能夠查詢出來,執行單條索引刪除:

7168&stream.contentType=text/xml;charset=utf-8&commit=true">http://localhost:8080/solr/update/?stream.body=<delete><id>7168</id></delete>&stream.contentType=text/xml;charset=utf-8&commit=true

再次查詢就查不到了:

wpsE776.tmp

 

資料庫下載

相關文章