一些背景:
- 涉及的数据是目录数据,具有三个嵌套对象:Products、Items 和 Sku,按此顺序排列。我们在每条记录上都有一个 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"
}
]
}
}
获取所有 Products 及其嵌套在其中的子项的查询是q=docType:Product&fl=title,id,docType,[child parentFilter=docType:Product]。当我运行该查询时,一切都很好,它返回前 10 行。但是,如果我通过添加来获取更多行,比如&rows=500,我们会收到错误Parent query yield document which is not match by parents filter, docID=XXX。
当我们第一次看到这个错误时,我们发现我们的 id 字段在文档类型中不是唯一的,所以我们添加了上面提到的 uuid 字段,即。我们还添加了在我们的 schema.xml 文件中,擦除核心,重新创建它,然后重新启动 Solr 以确保它生效。我们已经仔细检查并确保 uuid 字段是唯一的。
在我发现的该错误的所有搜索结果中,OP 没有可以区分不同文档类型的字段,但正如您所看到的那样。由于查询和 parentFilter 都在搜索docType:Product我看不出它们怎么可能返回除了父母之外的任何东西。我们还尝试添加 childFilter=docType:Item 和 childFilter=docType:Sku 但这没有帮助。而且我还尝试使用 title:* 作为查询和 parentFilter,因为只有 Products 有标题。
我们还有什么可以尝试的吗?
对此有何解释?
即使在 schema.xml 中指定了 uuid 作为唯一标识符,它是否有可能不使用它,这甚至会导致这种情况吗?
谢谢。