Solr DataImportHandler - JOIN与单独的实体

aru*_*run 5 solr dataimporthandler

在Solr DIH data-config.xml中,最好使用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">
Run Code Online (Sandbox Code Playgroud)

或使用单独的子实体,如:

<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>
Run Code Online (Sandbox Code Playgroud)

Jay*_*dra 7

很少有指针可以帮助您做出决定: -

  • 子实体为每个记录触发一个查询,因此如果你有一个巨大的集合,性能会更慢.
  • 如果您具有一对一映射,则可以使用连接,以便使用一个查询本身获取所有字段.
  • 如果您有多个根记录,您将使用可能创建多值字段的子实体.(你不能使用单个连接查询,因为它会为同一个文档返回多行,除非你想要这个行为)

  • 是.我通过测试证实了这一点.我每桌保留一个实体.主要查询加上子实体中的11个查询.每个实体都打开了与DB的单独客户端连接.一旦我使用JOIN(一对一)将7个子实体查询移动到主查询,它的索引速度提高了3倍. (2认同)