Solr DataImportHandler-连接与独立实体

Solr DataImportHandler-连接与独立实体,solr,dataimporthandler,Solr,Dataimporthandler,在Solr DIH data-config.xml中,在主实体中使用JOIN like查询获取尽可能多的字段是否更好: <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.li

在Solr DIH data-config.xml中,在主实体中使用JOIN like查询获取尽可能多的字段是否更好:

<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>

一些可以帮助您做出决定的建议:-

  • 子实体为每个记录触发一个查询,因此,如果您有一个庞大的集合,则性能会变慢
  • 如果您有一对一映射,您可以使用联接,这样您就可以通过一个查询本身获得所有字段
  • 如果根目录有多条记录,则将使用可能创建多值字段的子实体。(您不能使用单个联接查询,因为它将为同一文档返回多行,除非您需要该行为)

是的。我通过测试证实了这一点。我每桌保留一个实体。主查询加上子实体中的11个查询。每个实体都打开了到数据库的独立客户端连接。一旦我将7个子实体查询移动到带有连接的主查询(一对一),索引速度就提高了3倍。由于速度缓慢,子实体功能几乎毫无用处。