【问题标题】:Solr querying nested documents with ChildDocTransformerFactory, get "Parent query yields document which is not matched by parents filter"Solr 使用 ChildDocTransformerFactory 查询嵌套文档,得到“父查询产生与父过滤器不匹配的文档”
【发布时间】:2017-06-17 14:01:48
【问题描述】:

一些背景:

  • 涉及的数据是目录数据,按顺序包含三个嵌套对象:产品、项目和 Skus。我们在每条记录上都有一个 docType 字段作为区分符。
  • 我们数据中的“id”字段在数据类型中是唯一的,但在不同的数据类型中是唯一的。我们在程序中添加了一个“uuid”字段,用于生成 Solr 导入文件,该文件的 id 以 docType 的第一个字母为前缀,如 P12345。这使得 uuid 字段是唯一的,我们将其作为 schema.xml 中的 uniqueKey。
  • 我们正在尝试检索父产品和所有子文档。因此,我们使用 ChildDocTransformerFactory ([child...]) 来检索子项和父项。我们还没有解决将 SKU 中的项目作为嵌套文档在结果中获取的问题,我们将不得不在某个时候解决这个问题,但现在我们将它们扁平化
  • 我们正在为此构建概念验证。这是全新的工作,所以我们可以随意更改很多内容。
  • 这是 Solr 6.0.0,如果重要的话,我们将以 JSON 格式导入

我们的数据如下所示(为简单起见,我删除了一些字段):

{
  "id": 739063,
  "docType": "Product",
  "uuid": "P739063",
  "_childDocuments_": [
    {
      "id": 1537378,
      "price": 25.45,
      "color": "Blush",
      "docType": "Item",
      "productId": 739063,
      "uuid": "I1537378",
      "_childDocuments_": [
        {
          "id": 12799578,
          "size": "10",
          "width": "W",
          "docType": "Sku",
          "itemId": 1537378,
          "uuid": "S12799578"
        }
      ]
    }
}

获取所有产品及其嵌套在其中的子项的查询是 q=docType:Product&fl=title,id,docType,[child parentFilter=docType:Product]。当我运行该查询时,一切都很好,它返回前 10 行。但是,如果我通过添加例如 &rows=500 来获取更多行,我们会收到错误 Parent query yield document which is not matching by parents filter, docID=XXX

当我们第一次看到这个错误时,我们发现我们的 id 字段在文档类型中不是唯一的,所以我们添加了上面提到的 uuid 字段,即。我们还在 schema.xml 文件中添加了 ,擦除了核心,重新创建了它,然后重新启动了 Solr,以确保它生效。我们已经仔细检查并确定 uuid 字段是唯一的。

在我发现的该错误的所有搜索结果中,OP 没有可以区分不同文档类型的字段,但正如您所看到的那样。由于查询和 parentFilter 都在搜索 docType:Product 我看不出它们怎么可能返回除了父母之外的任何东西。我们还尝试添加 childFilter=docType:Item 和 childFilter=docType:Sku 但这没有帮助。我还尝试使用 title:* 作为查询和 parentFilter,因为只有 Products 有标题。

还有什么我们可以尝试的吗?

对此有何解释?

是否有可能它没有使用 uuid 作为唯一标识符,即使它是在 schema.xml 中指定的,甚至会导致这种情况?

谢谢。

【问题讨论】:

    标签: solr nested-documents


    【解决方案1】:

    结果我们甚至没有使用 schema.xml,因为 solrconfig.xml 是为托管模式配置的。哎呀。

    大部分文档都假设您使用的是无模式,甚至没有详细说明,所以我错过了。

    【讨论】:

      猜你喜欢
      • 2018-06-22
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2014-03-21
      • 2018-05-10
      • 2016-04-23
      • 2021-03-28
      相关资源
      最近更新 更多