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

2021-07-23 08:24:52 字數 1506 閱讀 2949

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

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

在標籤中間在新增乙個標籤即可,然後把對應的字段新增到中間就可以了,但是要注意幾點:

注意:1.標籤的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,也就是說如果你兩張表不在乙個資料庫,那麼你也可以同時對這兩張表建立索引,只需要將表和資料來源對應上就可以了,方式如下:

將表中需要建立索引的字段新增到該檔案中即可,注意,兩個表中相同的字段就可以不用再新增了

,比如,兩個表中都有id,那麼id欄位只寫一次就可以了。

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

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

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

官方的解釋是這樣的:

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

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

solr 對富文字 pdf等 建立索引

solrconfig.xml中定義的 last modified ignored my path to tika.config yyyy mm dd 需要額外jar包支援 apache solr cell 1.4.0.jar 請求的url樣例 solr update extract 請求url li...

solr 對富文字 pdf等 建立索引

solrconfig.xml中定義的 last modified ignored my path to tika.config yyyy mm dd 需要額外jar包支援 apache solr cell 1.4.0.jar 請求的url樣例 solr update extract 請求url li...

solr建立查詢索引

1 建立solrserver物件 try catch exception e 2 新增索引 collectiondocs newarraylist for int i 0 i list.size i try catch exception e 3 使用bean物件新增索引 建立乙個對應於solr索引...