mysql - 带有数据导入处理程序的 Solr 子文档

标签 mysql search solr lucene

我使用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 导入嵌套实体的正确配置是什么?

最佳答案

有两点需要提及:

  1. 根据文档 here ,

    请注意,“实体”元素可以嵌套,这允许实体 示例数据库中的关系将被镜像到这里,以便我们可以 生成非规范化的 Solr 记录,其中可能包含多个功能 对于一件商品

    因此,尽管 xml 中的实体结构就像父子结构,但它表示 solr 在内部存储为非规范化的。这就是这里发生的事情

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

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

关于mysql - 带有数据导入处理程序的 Solr 子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777792/

相关文章:

php - 无法将我的 PHP 代码连接到数据库 - Android Studio

mysql - "SELECT ... FOR UPDATE"不适用于 Hibernate 和 MySQL

mysql - 根据偏离轨道索引有条件地渲染歌词?

java - 从 Java 使用 Solrj 连接到 Solr 时出错

solr - 如何在Solr中搜索有限字段的关键字?

solr - "zip bomb"向 Solr 发送 HTML 文档时出现异常

php - 使用 PDO 安全可靠的面向对象插入

search - 如果 grep 不匹配,则打印输入的搜索字符串

c++ - 在排序的 std::list 中搜索的复杂性是什么?

c# - 快速查找可枚举对象中的结果