我创建了一个带有下面给出的映射的索引。索引是空的
{
"content": {
"mappings": {
"university": {
"properties": {
"state": {
"type": "nested",
"properties": {
"pincode": {
"type": "long"
},
"region": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
}
当我插入这样的文件时:
PUT content/university/1
{
"university": [
{
"state": {
"region": "usa",
"pincode": 5693
}
}
]
}
它正在创建一个新的映射,而不是加入之前定义的映射。
{
"content": {
"mappings": {
"university": {
"properties": {
"state": {
"type": "nested",
"properties": {
"pincode": {
"type": "long"
},
"region": {
"type": "string",
"index": "not_analyzed"
}
}
},
"university": {
"properties": {
"state": {
"properties": {
"pincode": {
"type": "long"
},
"region": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
我如何在弹性搜索中避免这种情况?
我是否必须为此使用内联脚本?
答案 0 :(得分:1)
我认为您的映射应该是这样的:
{
"content": {
"mappings": {
"university": {
"type": "nested",
"properties": {
"state": {
"properties": {
"pincode": {
"type": "long"
},
"region": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
}
如果university
是具有state
等嵌套属性的对象,则需要将type
university
字段声明为nested
而不是state
。
但是,如果您希望状态为嵌套类型,那么我认为您应该尝试索引文档,如:
{
"university": {
"state": [
{
"region": "usa",
"pincode": 5693
}
]
}
}
供您参考: https://www.elastic.co/guide/en/elasticsearch/reference/2.0/nested.html
答案 1 :(得分:0)
如果您的类型是大学,您应该创建如下映射:
{
"test" : {
"mappings" : {
"university" : {
"properties" : {
"state" : {
"type" : "nested",
"properties" : {
"pincode" : {
"type" : "long"
},
"region" : {
"type" : "string",
"index" : "not_analyzed"
}
}
}
}
}
}
}
}
因此您的映射或您尝试插入的文档都是错误的。您能否使用完整的映射和文档编辑问题?
答案 2 :(得分:0)
如果您想索引以下文件:
PUT content/university/1
{
"university": [
{
"state": {
"region": "usa",
"pincode": 5693
}
}
]
}
映射应定义如下:
PUT content
{
"mappings": {
"university": {
"properties": {
"university": {
"type": "nested",
"properties": {
"state": {
"type": "nested",
"properties": {
"pincode": {
"type": "long"
},
"region": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}
}
}
}