弹性搜索创建新映射而不是加入已定义的映射?

时间:2017-03-29 17:06:39

标签: elasticsearch

我创建了一个带有下面给出的映射的索引。索引是空的

{
  "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"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

我如何在弹性搜索中避免这种情况?

我是否必须为此使用内联脚本?

3 个答案:

答案 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"
                }
              }
            }
          }
        }
      }
    }
  }
}