带字段标签关系的Solr嵌套文档:单个元素未存储在数组中
在为数据编制索引时,我发现一些嵌套文档没有正确存储。我运行Solr8.3并将标记的关系用作 资料 每当根实体带字段标签关系的Solr嵌套文档:单个元素未存储在数组中,solr,nested-documents,Solr,Nested Documents,在为数据编制索引时,我发现一些嵌套文档没有正确存储。我运行Solr8.3并将标记的关系用作 资料 每当根实体Parent具有任意数量的子实体时,我生成以下PHP数组: [ ‘id’=>‘b14ac9a0-e255-468b-a673-e125fd73d6f2’, “实体类型”=>“父项”, “title_t”=>“Andrea Cook”, “儿童”=>[ 0 => [ “id”=>“ce10380c-8006-4945-9078-296116ad5ab7”, “实体类型”=>“子实体”, “t
Parent
具有任意数量的子实体时,我生成以下PHP数组:
[
‘id’=>‘b14ac9a0-e255-468b-a673-e125fd73d6f2’,
“实体类型”=>“父项”,
“title_t”=>“Andrea Cook”,
“儿童”=>[
0 => [
“id”=>“ce10380c-8006-4945-9078-296116ad5ab7”,
“实体类型”=>“子实体”,
“title_t”=>“Jordan Gibson”,
],
1 => [
“id”=>“0c191119-fae9-452e-aca2-b724a381f939”,
“实体类型”=>“子实体”,
“title\u 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查询返回的结果(加上自动生成的值\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
问题
每当父级<代码>只有一个子级<代码>时,它们将作为solr中的对象结束,而不是包含单个对象的数组
预期搜索结果
真实搜索结果
断言
我已经确保php数组和JSON对象的格式正确,直到它们被传递到HTTP客户端为止
我已确保子数组的数组键已编号并从0开始
问题
这是预期的行为吗
我是否必须为标记的关系创建一个
(即创建一个多值子字段)?如果是的话,我会怎么做?我还没有找到任何解释
如何在搜索结果中始终为子对象获取一个数组,以便在迭代之前不必检查数据
,我终于想到,我用PHP编程的数组操作(array\u map
,array\u merge
,…)正在创建具有奇怪索引的数组
为了解决这个问题,我必须调用array\u value
,这将创建原始的零索引数组 我终于想到,我用PHP编程的数组操作(array\u map
,array\u merge
,…)正在创建具有奇怪索引的数组
为了解决这个问题,我必须调用array\u value
,这将创建原始的零索引数组
{
"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"
}
}