我需要有关嵌套json文档的弹性搜索映射的帮助。 我在网上搜索了很多,但没有找到任何有用的点信息。 假设我有这种类型的数据..
{
"name" : "Zach",
"car" : [
{
"make" : "Saturn",
"model" : "SL"
},
{
"make" : "Subaru",
"model" : "Imprezza"
}
]
}
{
"name" : "Bob",
"car" : [
{
"make" : "Saturn",
"model" : "Imprezza"
}
]
}
其中汽车内部可以有任意数量的数据对象。 根据{{3}} doc,我发现对于嵌套的json,我必须将类型指定为嵌套。但是没有关于如何在嵌套类型下指定变量的映射信息的信息。
就像上面的例子一样,我可以像这样编写映射。
{
"person":{
"properties":{
"name" : {
"type" : "string"
},
"car":{
"type" : "nested"
}
}
}
}
但是如何为car.make
&提供映射信息car.model
...
这会在没有任何未来问题的情况下正常工作吗?
{
"person": {
"properties": {
"name" : {
"type" : "string"
},
"car": {
"type" : "nested"
"properties": {
"make": {....},
"model": {....}
}
}
}
}
}
答案 0 :(得分:17)
你可以这样做:
PUT /my_index
{
"mappings": {
"blogpost": {
"properties": {
"comments": {
"type": "nested",
"properties": {
"name": { "type": "string" },
"comment": { "type": "string" },
"age": { "type": "short" },
"stars": { "type": "short" },
"date": { "type": "date" }
}
}
}
}
}
}
答案 1 :(得分:0)
对象数组不像您期望的那样工作:您不能独立于数组中的其他对象查询每个对象。如果您需要能够做到这一点,那么您应该使用嵌套数据类型而不是对象数据类型。
tasks: {
type: 'nested',
properties: {
id: {
type: 'text',
},
description: {
type: 'text',
},
assignee: {
type: 'nested',
properties: {
id: {
type: 'text',
},
thumbnail: {
type: 'text',
},
},
},
},
},
https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html
答案 2 :(得分:-1)
您可以通过以下方式进行映射:
put /my_index/_mapping/my_type
{
"person": {
"properties": {
"name": {
"type": "text",
"analyzer": "string_lowercase",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"car": {
"type": "nested",
"properties": {
"make": {
"type": "text",
"analyzer": "string_lowercase",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"model": {
"type": "text",
"analyzer": "string_lowercase",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
}
}