【问题标题】:Import nested entities in Solr DIH在 Solr DIH 中导入嵌套实体
【发布时间】:2020-07-10 12:00:23
【问题描述】:

我需要配置通过 DIH 导入的嵌套实体。用户和地址之间是一对多的基数(用户有很多地址)。

这是我们在 data-config.xml 中的导入定义

<document>
    <entity name="user" query="...">
           <field column="id" name="id" />
           <field column="code" name="code" />
        // next fields of user

        <entity name="address" child="true" query="..." where="user_id=user.id">
           <field column="id" name="id" />
           <field column="city" name="city" />
           // ... next fields of address
        </entity>
    </entity>
</document>

schema.xml 配置如下:

// user fields
<field name="id" type="long" indexed="true" stored="true" />
<field name="name" type="string" indexed="true" stored="true" />
<field name="code" type="string" indexed="true" stored="true" />
// ...

// address fields
<field name="address" type="string" indexed="true" multiValued="true"  stored="true" />
<field name="address.id" type="long" indexed="true" stored="true" />
<field name="address.city" type="string" indexed="false" stored="true" />
// ...

此解决方案导致没有导入地址对象。谢谢你的建议。

编辑: 我还发现了很多警告日志 Error creating document : SolrInputDocument(fields: [user_id=122, ... _version_=1671840418228076544,&amp;#8203; _root_=00924553002],&amp;#8203; children: [SolrInputDocument(fields: [address_id=1,&amp;#8203; _root_=00924553002,&amp;#8203; _version_=1671840418228076544]),&amp;#8203; SolrInputDocument(fields: [address_id=20,&amp;#8203; _root_=00924553002,&amp;#8203; _version_=1671840418228076544])])

编辑 2: 应用程序中的默认日志隐藏错误。我检查了机器上的服务器日志,发现了这个错误: org.apache.solr.common.SolrException: [doc=null] missing required field: code at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:245)

在 schema.xml 中,我将此字段设置为用户的标识符,但孩子没有此字段。然后我尝试添加代码字段作为 ID 的别名,我发现另一个错误,它告诉父对象(用户)中使用的必填字段中缺少值。此条件也适用于嵌套对象。所以我也尝试从这些字段中删除这些条件。此导入运行后,但当我执行选择时,所有对象都在同一级别。 Solr 将其导入为平面。

这是预期的选择结果:

{
  "reponse": [
    {
      "id": 1,
      "code": "tsdx242-234",
      "first_name": "Michael",
      "last_name": "Sprox",
      "addresses": [
        {
          "id": 44,
          "city": "Paris",
          "street": "Champs-Elysees"
        },
        {
          "id": 24,
          "city": "Budapest",
          "street": "Akácfa utca"
        }
      ]
    },
    {
      "id": 2,
      "code": "xx45982-114",
      "first_name": "Petra",
      "last_name": "Jurka",
      "addresses": [
        {
          "id": 31,
          "city": "Vienna",
          "street": "Karlsplatz"
        },
        {
          "id": 44,
          "city": "Paris",
          "street": "Champs-Elysees"
        }
      ]
    }
  ]
}

但它提供了这个,混合的用户和地址在一个爱中:

{
  "response": [
    {
      "id": 44,
      "city": "Paris",
      "street": "Champs-Elysees"
    },
    {
      "id": 24,
      "city": "Budapest",
      "street": "Akácfa utca"
    },
    {
      "id": 31,
      "city": "Vienna",
      "street": "Karlsplatz"
    },
    {
      "id": 1,
      "code": "tsdx242-234",
      "first_name": "Michael",
      "last_name": "Sprox"
    },
    {
      "id": 2,
      "code": "xx45982-114",
      "first_name": "Petra",
      "last_name": "Jurka"
    }
  ]
}

【问题讨论】:

  • @AbhijitBashetti 没有帮助,但我在日志中发现了一些东西,所以我编辑了问题。请检查一下。
  • 嘿,你可以在 ..\solr-7.6.0\server\logs\solr.log 找到确切的错误,你能用那个错误日志编辑你的问题吗?
  • @MansiJoshi 我用服务器日志中的错误更新了问题。

标签: solr


【解决方案1】:

试着改写成这样的

<document>
        <entity name="user" query="...">
               <field column="id" name="id" />
            // next fields of user
    
            <entity name="second_entity_name" pk="user_id" query="SELECT ... FROM where user_id = '${user.id}'" >
               <field column="id" name="id" />
               <field column="city" name="city" />
               // ... next fields of address
            </entity>
        </entity>
    </document>

【讨论】:

  • 您好,这没有帮助,但我发现了一些警告日志,所以我将其添加到问题中。
  • 您可以展开日志查看更详细的信息,可能是映射类型设置错误
  • 请检查 EDIT 2。我找到了可能的错误原因。
  • 尝试通过将一个字段映射到一个并将require设置为false来缓慢映射。看起来你有错误的映射
  • 我尝试过 solr 导入的数据,但错误。检查编辑2,导入通过,但数据是在平面模型中导入的,所以没有层次结构,所有对象都在同一级别
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
相关资源
最近更新 更多