2011-06-15 88 views
0

我正在開發使用索爾的搜索引擎,並且我已成功地使用DIH(Dataimport處理程序)從一個表索引數據。我需要的是從5個不同的表中獲取搜索結果。沒有幫助,我無法做到這一點。使用DIH索引索引多表中索引

如果我們假設x表有x行,那麼每張表應該有x * x個文檔,如果總共有5個表,則導致5x個文檔。在dataconfig.xml中,我在單個文檔中創建了5個獨立的實體,如下所示。當我查詢*:*時,索引數據的結果只有6個實體用戶,3個來自實體類,即用戶總行數爲9個。

顯然,這種方式對我來說並不適用,所以如何我可以使用唯一的核心來實現嗎?

注意:我跟着DIHQuickStartDIH tutorial這沒有幫助我。

<document> 
    <!-- Users --> 
    <entity dataSource="JdbcDataSource" name=" > 
      <field column="name" name="name" sourceColName="name" /> 
      <field column="username" name="username" sourceColName="username"/> 
      <field column="email" name="email" sourceColName="email" /> 
      <field column="country" name="country" sourceColName="country" /> 
    </entity> 

<!-- Classes --> 
    <entity dataSource="JdbcDataSource" name="classes" > 
      <field column="code" name="code" sourceColName="code" /> 
      <field column="title" name="title" sourceColName="title" /> 
      <field column="description" name="description" sourceColName="description" /> 
    </entity> 

    <!-- Schools --> 
    <entity dataSource="JdbcDataSource" name="schools" > 
      <field column="school_name" name="school_name" sourceColName="school_name" /> 
      <field column="country" name="country" sourceColName="country" /> 
      <field column="city" name="city" sourceColName="city" /> 
    </entity> 

    <!-- Resources --> 
    <entity dataSource="JdbcDataSource" name="resources" > 
      <field column="title" name="title" sourceColName="title" /> 
      <field column="description" name="description" sourceColName="description" /> 
    </entity> 

    <!-- Tasks --> 
    <entity dataSource="JdbcDataSource" name="tasks" > 
      <field column="title" name="title" sourceColName="title" /> 
      <field column="description" name="description" sourceColName="description" /> 
    </entity> 

</document>  

回答

1

你需要在你的表的結構看然後創建查詢連接或creat嵌套實體像這樣的例子

<dataConfig> 
<dataSource driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:/temp/example/ex" user="sa" /> 
    <document name="schools"> 
     <entity name="school" query="select * from schools s "> 
      <field column="school_name" name="school_Name" />  
     <entity name="school_class" query="select * from schools_classes sc where sc.school_name = '${school.school_name}'"> 
     <field column="class_code" name="class_code" />  
     <entity name="class" query="select class_name from classes c where c.class_name= '${school_class.class_code}'"> 
      <field column="class_name" name="class_name" />  
     </entity> 
     </entity> 
     </entity> 
    </document> 
</dataConfig> 
+0

這可能會幫助,但我需要什麼所有這5個表都被視爲每行的搜索結果項目,因此我可以將其用於一般搜索。這是搜索以下示例的示例:1-類2-用戶b 3-任務4-資源a – Khaled 2011-06-15 13:58:18

+0

您可能想要使用緩存實體版本http://wiki.apache.org/solr/DataImportHandler#CachedSqlEntityProcessor – 2011-06-15 22:14:23