【问题标题】:Solr DataImportHandler - JOIN vs. separate entitySolr DataImportHandler - JOIN 与单独的实体
【发布时间】:2013-03-21 18:21:26
【问题描述】:

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

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

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

【问题讨论】:

    标签: solr dataimporthandler


    【解决方案1】:

    一些可以帮助您做出决定的指针:-

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

    【讨论】:

    • 是的。我通过测试证实了这一点。我每张桌子保留一个实体。有主查询加上子实体中的 11 个查询。每个实体都打开了与数据库的单独客户端连接。一旦我将 7 个子实体查询与 JOIN(一对一)一起移动到主查询,它的索引速度提高了 3 倍。
    • 由于速度慢,子实体功能几乎没用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2012-06-21
    • 1970-01-01
    • 2011-08-23
    • 2011-10-19
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多