1. 程式人生 > >SOLR對多個(關聯)表建立索引

SOLR對多個(關聯)表建立索引

原文:http://www.cnblogs.com/liaidai/p/4906714.html

一、無關聯多表建立索引

1.1資料庫準備

  首先在資料庫建立一張表,本來有一個tuser表了,我又建立了一個role表,就兩三個欄位,沒什麼特殊的,然後在裡面隨便新增幾條資料即可,看一下資料庫:

1.2data-config.xml

  資料庫建立完成之後就是修改data-config.xml檔案了,因為資料庫跟solr之間的關聯主要就是建立在這個檔案上面的,所以接下來就是修改該檔案了,我已經寫好了,下面直接貼出來看一下即可:

在<document></document>標籤中間在新增一個<entity>標籤即可,然後把對應的欄位新增到中間就可以了,但是要注意幾點:

注意:

  1.<entity>標籤的name屬性,該屬性用來區分不同的entity,所以不能和其他的entity標籤的name相同。

  2.pk屬性,資料庫中表的主鍵是什麼,那麼pk屬性的值就是什麼,不能改變。

  3.第三點很重要,首先,我們再schema.xml中配置有這樣的屬性,這個配置代表著solr建立索引時對於id的值具有唯一性,就像資料庫表的主鍵一樣不能重複,在資料庫中主鍵重複會報錯,但是solr建立索引時,如果id的值重複,那麼後面建立的索引會覆蓋前面建立的索引,我們平時建立表時主鍵id一般都是int型別自增的,這樣的話兩個表的id值很可能相同,那麼就會發生索引覆蓋的情況。那麼怎麼解決呢?一個辦法是主鍵id使用uuid的方式,這樣肯定不會重複的,也就不會發生索引覆蓋的情況了。但是我們大多數情況下還是使用自增的方式作為id,我在網上查了下,有人直接在schema.xml中去掉uniqueKey屬性,也有在兩張表中新建立一個欄位,將這個欄位設定為uniqueKey

屬性的值,以此來達到索引不覆蓋的目的,但是這兩種方式我都沒有嘗試過,大家有興趣的可以自己去嘗試一下。

  4.在該檔案中可以配置多個dataSource,也就是說如果你兩張表不在一個數據庫,那麼你也可以同時對這兩張表建立索引,只需要將表和資料來源對應上就可以了,方式如下:

1.3.修改schema.xml

  將表中需要建立索引的欄位新增到該檔案中即可,注意,兩個表中相同的欄位就可以不用再添加了,比如,兩個表中都有id,那麼id欄位只寫一次就可以了。

  按照上面的方式配置完成之後,啟動tomcat,訪問localhost:8080/solr頁面,重新建立索引,建立完的索引如下所示:

 View Code

  我資料庫中兩個表一共只有8條資料,建立的索引也是8條,關於id的事,只要兩個表中的id不重複,那麼就不會發生索引覆蓋的事,所以我這裡只是簡單做一個例子,關於索引覆蓋的事大家可以按照我上面說的幾種方法操作就可以了,當然有更好的方法更好了。

二、關聯表建立索引

 至於關聯表建立索引和單表建立索引差不多,本來我是想單獨建立幾個表,然後再一點一點寫出來,但是突然想起來前兩天有個朋友給我評論說我寫的東西完全看不明白,所以我想這次試試直接使用官方提供的例子來寫,什麼意思呢?就是把官方文件上的內容貼上過來試試,其實官方文件寫的更好。

  2.1.資料庫配置

  

  2.2.data-congfig.xml配置

 View Code

除了上面那種方式,官方文件還給出了另外一種方式,但是這種方式我沒用過,下面我把那種方式貼出來,也把官方文件的解釋貼出來,大家可以自己看著使用吧,不過我還是喜歡使用上面的這種方式:

 View Code

官方的解釋是這樣的:

In the above example, there are mappings of fields to Solr fields. It is possible to totally avoid the field entries in entities if the names of the fields are same (case does not matter) as those in Solr schema. You may need to add a field entry if any of the built-in Tranformers are used (see Transformer section)

  接下來還是修改schema.xml文件,把需要建立索引的欄位放到該檔案中即可。

  多表建立索引的方式我就介紹完了,雖然寫的很粗糙,但是應該還有點用吧,更多的內容大家可以自己去檢視官方文件的http://wiki.apache.org/solr/DataImportHandler這個地方,至於有人說都是英文看不懂,關於這個問題我想說的是其實我英文也是半吊子,但是藉助一些翻譯工具還是能看一點的,看的多了就看的懂了,不要怕看英文,堅持看下去總能看的懂的,就算你看不全懂,至少能明白大概說的什麼意思就行啊,帶蒙帶猜的,這都不是事。

  另外關於solr的其他東西我就暫時不不寫了,一方面是因為我研究這個時間也不長,有些東西我也不是太懂,目前只能算是剛剛入門吧,另一方面,本來要用solr的專案又說不用了,新開的專案也是比較緊急,所以關於solr的東西也只好暫時先放下了,以後再用到的時候再撿起來繼續吧。恩,暫時就這樣了。