【问题标题】:Solr child document with data import handler带有数据导入处理程序的 Solr 子文档
【发布时间】:2015-10-24 23:59:07
【问题描述】:

我使用 Solr 的 DIH 从 MySQL 数据库中导入数据。我的数据配置定义为:

<document>
    <entity name="PARENT" query="SELECT * FROM PARENT">
        <field name="id" column="id" />
        <entity name="CHILD" child="true" query="SELECT * FROM CHILD WHERE id = ${PARENT.id}">
            <field name="id" column="id" />
            <field name="field1" column="field2" />
            <field name="field1" column="field2" />
        </entity>
    </entity>
</document>

我必须在子文档中包含一个 id 字段,在 schema.xml 中包含一个 root 字段。但是导入的文件不像

{
    id:1
    {
        field1:
        field2:
        field3:
    }
},
{
    id:2
    {
        field1:
        field2:
        field3:
    }
}

,但喜欢

{
    id:1
    field1:
    root:1
},
{
    id:1
    field2:
    root:1
},
{
    id:1
    field3:
    root:1
},

这是预期的结果吗?谁能告诉我使用 DIH 从 MySQL 导入嵌套实体的正确配置是什么?

【问题讨论】:

    标签: mysql search solr lucene


    【解决方案1】:

    提两点:

    1. 根据文档here

      请注意,“实体”元素可以嵌套,这允许实体 示例数据库中的关系要在此处进行镜像,以便我们可以 生成可能包含多个特征的非规范化 Solr 记录 一件物品

      所以即使实体的结构,在 xml 中就像父子,它表示 solr 在内部存储为非规范化的。所以这就是发生在这里的帽子

    2. 您是否正在单独获取孩子的 id?我可以看到,在所有子文档中都重复了根,这是预期的,但是 id(假设它是子 id)也是相同的,这很奇怪。你能确认一下吗?

    在 solr 中添加文档时,使用嵌套概念,总是会得到 1+n 个文档,其中 1 是父级,n 是子级

    【讨论】:

    • 感谢您的回答。我不确定在子实体中使用 id 字段。孩子应该是他们父母的一部分,当你找到父母实体时,你也应该能够找到孩子。 root 在这里有意义,但为什么 id 也存在?在 Json 数据库中,您永远不需要为子实体提供 id。是的,每个实体有 n+1 个文档,但父实体似乎与子实体具有相同的深度。虽然块连接可以查询父文档,但将子文档存储在父文档“内部”会更简单、更有效。
    • 只要你有一个单独的孩子id,应该没问题。为 chldren 提供单独的 id 是您的要求。我想 Solr 具有默认 ID 的功能。当数据非规范化时,Solr 效果最好。我认为,嵌套实体只是一种抽象,允许外部世界根据关系查看文档,但在内部,如您所见,它们是非规范化的。正如你所说,只要你有块连接,你就可以从父母那里得到孩子,反之亦然。所以我希望这里一切都好
    • 感谢您的友好回答。我还看到很多人提到了一个可以启用块索引的 DIH (SOLR-5147) 补丁。此补丁是否已包含在最新版本中,还是我需要手动应用?
    • 我刚刚发现这篇文章heliosearch.org/expand-block-join 正是你所说的。非规范化结构用于 solr。
    • 嗨,SOLR-5147,似乎已在 5.1 版中修复。您可以看到添加的所有文档,这意味着您的 DIH 支持索引子文档的功能。请使用块连接进行验证,以确认搜索部分也正常工作。对于您的更新评论,是的 - solr 最适合非规范化。但有时很难以这种格式索引所有数据,所以框架决定要做什么可能更好,我们可以从抽象层添加 - 就像上面一样,在 solrj solrInputDocument.addChildren() 等等..快乐学习
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多