• Elasticsearch索引mapping的写入、查看与修改(转)


    mapping的写入与查看

    首先创建一个索引:

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

      

    可以看到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",
                        "index": "not_analyzed"
                    },
                    "price": {
                        "type": "double"
                    },
                    "onSale": {
                        "type": "boolean"
                    },
                    "type": {
                        "type": "integer"
                    },
                    "createDate": {
                        "type": "date"
                    }
                }
            }
      }
    '
     
    {
      "acknowledged" : true
    }
    

      

    上面的操作中,我们给productindex加了一个type,并写入了product的mapping信息,再次查看:

    curl -XGET "http://127.0.0.1:9200/productindex/_mapping?pretty"
    {
      "productindex" : {
        "mappings" : {
          "product" : {
            "properties" : {
              "createDate" : {
                "type" : "date",
                "format" : "strict_date_optional_time||epoch_millis"
              },
              "description" : {
                "type" : "string",
                "index" : "not_analyzed"
              },
              "onSale" : {
                "type" : "boolean"
              },
              "price" : {
                "type" : "double"
              },
              "title" : {
                "type" : "string",
                "store" : true
              },
              "type" : {
                "type" : "integer"
              }
            }
          }
        }
      }
    }
    

      

    修改mapping

    如果想给product新增一个字段,那么需要修改mapping,尝试一下:

    curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping?pretty" -d '{
         "product": {
                    "properties": {
                         "amount":{
                            "type":"integer"
                       }
                    }
                }
        }'
    {
      "acknowledged" : true
    }
    

      

    新增成功。 
    如果要修改一个字段的类型呢,比如onSale字段的类型为boolean,现在想要修改为string类型,尝试一下:

     curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping?pretty" -d '{
         "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机制的。 
    这里有一篇关于修改mapping字段的博客,叙述的比较清楚:Elasticsearch 的坑爹事——记录一次mapping field修改过程,可以参考.

  • 相关阅读:
    HBase 异步查询导致的死锁和zookeeper通信中断问题追踪与总结[非技术]
    [读书笔记]代码整洁之道读书笔记
    HBase行锁与MVCC分析
    进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿
    上周回顾 - 2012年11.26-12.4
    2012年一个屌丝程序员的学习总结:读书、户外、泡妞、习惯、母猪产后护理
    C#_WinForm接收命令行参数
    SQL常识
    集成.Net / Flex3 & FluorineFX — Part II: The Client
    DB2基本概念
  • 原文地址:https://www.cnblogs.com/sandea/p/10557125.html
Copyright © 2020-2023  润新知