zoukankan      html  css  js  c++  java
  • 【Elasticsearch】Elasticsearch索引的创建、查看及修改

    转:

    • 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    • 本文链接:https://blog.csdn.net/liuxiao723846/article/details/78444472

    mapping的写入与查看
       使用elasticsearch保存数据之前创建索引非常关键,一个好的索引使后续业务的查询更加方便快捷,我们创建索引时如果不指定相关信息,会按照默认设置创建,如果我们想要更加强大的功能,比如中文检索、拼音检索、首拼检索,就需要我们自己规划索引的创建,一般索引创建后不能更改,所以创建索引时要特别注意。下面是创建索引的最基础的步骤,供新手们参考。

    以下POST命令如果执行不成功可以换成PUT尝试,本人在kibana软件中亲测有效。


    1、首先创建一个索引:

    curl -XPOST "http://127.0.0.1:9200/productindex"

    命令执行正常则返回:{"acknowledged":true}  
     

    现在只创建了一个索引,并没有设置mapping,查看一下索引mapping的内容:
    curl -XGET "http://127.0.0.1:9200/productindex/_mapping?pretty" 
    {
      "productindex" : {
        "mappings" : { }
      }
    }

    2、给索引添加属性

    可以看到mapping为空,我们只创建了一个索引,并没有进行mapping配置,mapping自然为空。 
    下面给productindex这个索引加一个type,type name为product,并设置mapping:
    curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping?pretty" -d ' 
    {
        "product": {
                "properties": {
                    "title": {
                        "type": "string",
                        "store": "yes"
                    },
                    "description": {
                        "type": "string",
                        "analyzer": "standard"
                    },
                    "price": {
                        "type": "double"
                    },
                    "onSale": {
                        "type": "boolean"
                    },
                    "type": {
                        "type": "integer"
                    },
                    "createDate": {
                        "type": "date"
                    }
                }
            }
      }

    命令执行正常则返回:{"acknowledged" : true}

    3、查看mapping结果
    上面的操作中,我们给productindex加了一个type,并写入了product的mapping信息,再次查看:
    curl -XGET "http://127.0.0.1:9200/productindex/_mapping"
    {
      "productindex" : {
        "mappings" : {
          "product" : {
            "properties" : {
              "createDate" : {
                "type" : "date",
                "format" : "strict_date_optional_time||epoch_millis"
              },
              "description" : {
                "type" : "string",
                "analyzer": "standard"
              },
              "onSale" : {
                "type" : "boolean"
              },
              "price" : {
                "type" : "double"
              },
              "title" : {
                "type" : "string",
                "store" : true
              },
              "type" : {
                "type" : "integer"
              }
            }
          }
        }
      }
    }

    4、修改mapping(新增一个新字段)
    如果想给product新增一个字段,那么需要修改mapping,尝试一下:
    curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping

    {
         "product": {
                    "properties": {
                         "amount":{
                            "type":"integer"
                       }
                    }
                }
        }'
    {

    5、修改mapping(修改原有字段)  
    如果要修改一个字段的类型呢,比如onSale字段的类型为boolean,现在想要修改为string类型,尝试一下:
     curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping

    {
         "product": {
                    "properties": {
                     "onSale":{
                        "type":"string" 
                   }
                }
            }
    }
    返回错误:
    {
      "error" : {
        "root_cause" : [ {
          "type" : "illegal_argument_exception",
          "reason" : "mapper [onSale] of different type, current_type [boolean], merged_type [string]"
        } ],
        "type" : "illegal_argument_exception",
        "reason" : "mapper [onSale] of different type, current_type [boolean], merged_type [string]"
      },
      "status" : 400
    }

    为什么不能修改一个字段的type?原因是一个字段的类型修改以后,那么该字段的所有数据都需要重新索引。Elasticsearch底层使用的是lucene库,字段类型修改以后索引和搜索要涉及分词方式等操作,不允许修改类型在我看来是符合lucene机制的。

  • 相关阅读:
    [华为]字符串反转
    [华为]字符个数统计
    [华为]字符串分隔
    [华为]计算字符个数
    [华为]字符串最后一个单词的长度
    感悟-思考-生活
    [百度校招]打印全排列
    [阿里]逆序打印整数,要求递归实现
    [百度]数组中去掉连续重复的数字,只保留1个
    百度NLP三面
  • 原文地址:https://www.cnblogs.com/jxd283465/p/11698972.html
Copyright © 2011-2022 走看看