2013-03-21 82 views
5

在Solr的DIH數據-config.xml中,是能夠更好地儘可能多的領域儘可能與查詢主實體與JOIN像獲取:Solr的DataImportHandler - JOIN與獨立的實體

<entity name="Lists" 
     pk="l.list_id" 
     query="SELECT l.list_id AS id, l.user_id, lo.is_votable FROM lists l 
       INNER JOIN list_options lo ON lo.list_id = l.list_id"> 

或使用就像一個獨立的子實體:

<entity name="Lists" 
     pk="l.list_id" 
     query="SELECT l.list_id AS id, l.user_id FROM lists l"> 

    <entity name="ListOptions" 
      query="SELECT lo.is_votable FROM list_options lo 
        WHERE lo.list_id=${Lists.id}" /> 

</entity> 

回答

7

幾個指標,這可以幫助你決定: -

  • 子實體火查詢每個重因此如果您擁有巨大的收藏品,則性能會更慢。
  • 如果您有一對一映射,則可以使用該連接,以便您可以使用一個查詢自己獲取所有字段。
  • 如果你有多個記錄的根,你會使用可能會創建一個多值字段的子實體。 (您不能使用單個連接查詢,因爲它會爲同一文檔返回多行,除非您需要該行爲)
+2

是的。我通過測試證實了它。每桌一個實體。主查詢加上11個子實體查詢。每個實體都打開一個單獨的客戶端連接到數據庫。一旦我將7個子實體查詢與JOIN(一對一)一起移動到主查詢中,它將索引速度提高了3倍。 – arun 2013-03-22 05:19:58

+0

由於緩慢,子實體功能幾乎無用。 – 2016-12-19 19:49:52