2013-03-21 70 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