Solr 嵌套文档,带字段标记关系:未存储在数组中的单个元素



在索引我的数据时,我发现一些嵌套文档没有正确存储。我运行 Solr 8.3 并利用文档中描述的标记关系

数据

每当根实体Parent具有任意数量的Child实体时,我都会生成以下 PHP 数组:

[
'id' => 'b14ac9a0-e255-468b-a673-e125fd73d6f2',
'entity_type' => 'parent',
'title_t' => 'Andrea Cook',
'children' => [
0 => [
'id' => 'ce10380c-8006-4945-9078-296116ad5ab7',
'entity_type' => 'child',
'title_t' => 'Jordan Gibson',
],
1 => [
'id' => '0c191119-fae9-452e-aca2-b724a381f939',
'entity_type' => 'child',
'title_t' => 'Jane Gordon',
],
]
]

然后将其编码为以下 JSON 对象:

{
"id": "b14ac9a0-e255-468b-a673-e125fd73d6f2",
"entity_type": "parent",
"title_t": "Andrea Cook",
"children": [
{
"id": "ce10380c-8006-4945-9078-296116ad5ab7",
"entity_type": "child",
"title_t": "Jordan Gibson"
},
{
"id": "0c191119-fae9-452e-aca2-b724a381f939",
"entity_type": "child",
"title_t": "Jane Gordon"
}
]
}

这反过来又正是 solr 查询返回的内容(加上自动生成的值__root____nest_path__等(。

问题

每当一个Parent只有一个Child时,它们最终会成为solr中的一个对象,而不是一个包含单个对象的数组。

预期搜索结果

{
"id": "b14ac9a0-e255-468b-a673-e125fd73d6f2",
"entity_type": "parent",
"title_t": "Andrea Cook",
"children": [
{
"id": "ce10380c-8006-4945-9078-296116ad5ab7",
"entity_type": "child",
"title_t": "Jordan Gibson"
}
]
}

真实搜索结果

{
"id": "b14ac9a0-e255-468b-a673-e125fd73d6f2",
"entity_type": "parent",
"title_t": "Andrea Cook",
"children": {
"id": "ce10380c-8006-4945-9078-296116ad5ab7",
"entity_type": "child",
"title_t": "Jordan Gibson"
}
}

断言

我已经确保php数组和JSON对象是正确的,直到它们被传递给HTTP客户端。

我已确保children数组的数组键已编号并从 0 开始。

问题

这是预期的行为吗?

我是否必须为标记的关系创建一个<fieldType/>(即创建一个多值children字段(?如果是,那我该怎么做?我还没有找到任何解释。

如何始终在搜索结果中获取children数组,这样我就不必在迭代数据之前检查数据?


uuidgenerator.netuinames.com

我终于想到,我在PHP中编程的数组操作(array_maparray_merge,...(正在创建带有奇怪索引的数组。

为了解决这个问题,我不得不调用array_values,它创建原始的零索引数组。

从我的updateRequestProcessorChain in solrconfig.xml中删除"solr.TrimFieldUpdateProcessorFactory"为我解决了这个问题。 (溶胶 8.8.1(

相关内容

  • 没有找到相关文章

最新更新