如何在 Elasticsearch 中插入嵌套类型的数据?



我是 elasticsearch 的新手。我正在将 elasticsearch 与 django 一起使用。我成功地创建了弹性搜索索引,

{
"productcategories": {
"aliases": {},
"mappings": {
"product_categories": {
"properties": {
"categoryName": {
"type": "text"
},
"subCategories": {
"type": "nested",
"properties": {
"partNumbers": {
"type": "nested"
},
"subCategoryName": {
"type": "text"
}
}
}
}
}
},
"settings": {
"index": {
"creation_date": "1537766526678",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "k_8XilbrTn2jM03Djp1pXQ",
"version": {
"created": "6040099"
},
"provided_name": "productcategories"
}
}
}
}

我正在尝试使用格式插入数据,

data={
"categoryName":'TestConnector',
"subCategories": [
{   
'subCategoryName':'Connector1',
'partNumbers':['HFBR-2412T','HFBR-2506AMZ']
},
{   
'subCategoryName':'Connector2',
'partNumbers':['HFBR-2422Z','HFBR-2412Z']
}
]
}

settings.ES_CLIENT.index(index=ProductCategories._meta.es_index_name,doc_type=ProductCategories._meta.es_type_name,body=data(

它给了我以下错误,

elasticsearch.exceptions.RequestError: RequestError(400, 'mapper_parsing_exception', 'object mapping for [subCategories.partNumbers] tried to parse field [null] as object, but found a concrete value')

谁能帮我。

查看您的映射,您无需将partNumbers定义为nested,因为它将是一个简单的字符串数组。

{
"mappings": {
"product_categories": {
"properties": {
"categoryName": {
"type": "text"
},
"subCategories": {
"type": "nested",
"properties": {
"partNumbers": {
"type": "text" // use "text" instead of "nested"
},
"subCategoryName": {
"type": "text"
}
}
}
}
}
}
}

裁判:

  • https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html

此错误是由于您尝试编制索引的数组类型数据导致的。

无需指定映射是数组。您可以使用方括号将任何映射视为数组:

"partNumbers": ["HFBR-2412T", "HFBR-2506AMZ"]

那么你的映射应该是

{
"mappings": {
"product_categories": {
"properties": {
"categoryName": {
"type": "text"
},
"subCategories": {
"type": "nested",
"properties": {
"subCategoryName": {
"type": "text"
}
}
}
}
}
}
}

最新更新