我正在使用ElasticSearch 8.3.2来存储我的一些数据。这些数据包括代谢物和每个代谢物的几个“研究”,每个研究又包含浓度值。我还使用Python ElasticSearch client来与后端通信,它工作得很好。为了将代谢物与研究相关联,我正在考虑使用here所描述的连接字段。
我定义了这个索引Map:
INDEXMAPPING_MET = {
"mappings": {
"properties": {
"id": {"type": "keyword"},
"entry_type": {"type": "text"},
"pc_relation": {
"type": "join",
"relations": {
"metabolite": "study"
}
},
"concentration": {
"type": "nested",
}
}
}
}
pc_relation
是这里的连接字段,代谢物是每个研究文档的父文档。例如,我可以使用Python客户端创建代谢物条目(父文档
self.client.index(index="metabolitesv2", id=metabolite, body=json.dumps({
#[... some other fields here]
"pc_relation": {
"name": "metabolite",
},
}))
然而,一旦我尝试添加子文档,我会得到一个mapping_parser_exception
。值得注意的是,我只在尝试添加pc_relation
字段时得到这个异常,任何其他字段都可以正常工作,如果我省略了连接字段,我可以创建文档。下面是我尝试创建的研究文档的一个示例(在同一索引上):
self.client.index(index="metabolitesv2", id=study, body=json.dumps({
#[... some other fields here]
"pc_relation": {
"name": "study",
"parent": metabolite_id
},
}))
一开始我认为可能有一些类型问题,但是不幸的是将所有内容都转换为字符串并没有改变结果。我真的很感激任何关于错误可能在哪里的帮助,因为我真的不确定问题是什么-从我可以从官方ES文档和其他Python+ES项目中看出,我真的没有做任何不同。
已尝试:创建具有联接字段的索引、创建父文档、创建与父文档具有联接关系的子文档。预期:创建文档,并可使用has_child
或has_parent
标签进行查询。结果:尝试创建子文档时出现MappingParserException
1条答案
按热度按时间qacovj5a1#
尾巴;
您需要在为子文档建立索引时执行provide a routing value。
路由值是必需的,因为父文档和子文档必须在同一个碎片上建立索引
默认情况下,文档的路由值是它的
_id
,因此实际上,在索引子文档时需要提供父文档的_id
。溶液
为了重现