elasticsearch的mapping

PUT /website/article/1

{

  "post_date": "2017-01-01",

  "title": "my first article",

  "content": "this is my first article in this website",

  "author_id": 11400

}

 

执行上面的语句,es会创建type对应的mappingmapping中包含了每个field对应的数据类型。

 

GET /website/_mapping/article

 

响应:

{

  "website": {

    "mappings": {

      "article": {

        "properties": {

          "author_id": {

            "type": "long"

          },

          "content": {

            "type": "text",

            "fields": {

              "keyword": {

                "type": "keyword",

                "ignore_above": 256

              }

            }

          },

          "post_date": {

            "type": "date"

          },

          "title": {

            "type": "text",

            "fields": {

              "keyword": {

                "type": "keyword",

                "ignore_above": 256

              }

            }

          }

        }

      }

    }

  }

}

 

 

1exact value

 

2017-01-01exact value,搜索的时候,必须输入2017-01-01,才能搜索出来

如果你输入一个01,是搜索不出来的

 

2full text  全文检索

1)缩写 vs. 全程:cn vs. china

2)格式转化:like liked likes

3)大小写:Tom vs tom

4)同义词:like vs love

 

china,搜索cn,也可以将china搜索出来

likes,搜索like,也可以将likes搜索出来

Tom,搜索tom,也可以将Tom搜索出来

like,搜索love,同义词,也可以将like搜索出来

 

就不是说单纯的只是匹配完整的一个值,而是可以对值进行拆分词语后(分词)进行匹配,也可以通过缩写、时态、大小写、同义词等进行匹配。

 

 

3、数据类型

 

1、核心的数据类型

 

string

byteshortintegerlong

floatdouble

boolean

date

 

2dynamic mapping

 

true or false --> boolean

123 --> long

123.45 --> double

2017-01-01 --> date

"hello world" --> string/text

 

3、查看mapping

 

GET /index/_mapping/type

 

4、如何建立索引

1、如何建立索引

 

analyzed

not_analyzed

no

 

2、修改mapping

 

只能创建index时手动建立mapping,或者新增field mapping,但是不能update field mapping

 

PUT /website

{

  "mappings": {

    "article": {

      "properties": {

        "author_id": {

          "type": "long"

        },

        "title": {

          "type": "text",

          "analyzer": "english"

        },

        "content": {

          "type": "text"

        },

        "post_date": {

          "type": "date"

        },

        "publisher_id": {

          "type": "text",

          "index": "not_analyzed"   //not_analyzed

        }

      }

    }

  }

}

 

不能update field mapping

 

PUT /website

{

  "mappings": {

    "article": {

      "properties": {

        "author_id": {

          "type": "text"

        }

      }

    }

  }

}

 

{

  "error": {

    "root_cause": [

      {

        "type": "index_already_exists_exception",

        "reason": "index [website/co1dgJ-uTYGBEEOOL8GsQQ] already exists",

        "index_uuid": "co1dgJ-uTYGBEEOOL8GsQQ",

        "index": "website"

      }

    ],

    "type": "index_already_exists_exception",

    "reason": "index [website/co1dgJ-uTYGBEEOOL8GsQQ] already exists",

    "index_uuid": "co1dgJ-uTYGBEEOOL8GsQQ",

    "index": "website"

  },

  "status": 400

}

 

 

 

//建立一个新的field并指定mapping

PUT /website/_mapping/article

{

  "properties" : {

    "new_field" : {

      "type" :    "string",

      "index":    "not_analyzed"

    }

  }

}

 

3、测试mapping

 

GET /website/_analyze

{

  "field": "content",

  "text": "my-dogs"

}

 

GET website/_analyze

{

  "field": "new_field",

  "text": "my dogs"

}

 

//下面报错是因为new_field不允许分词

{

  "error": {

    "root_cause": [

      {

        "type": "remote_transport_exception",

        "reason": "[4onsTYV][127.0.0.1:9300][indices:admin/analyze[s]]"

      }

    ],

    "type": "illegal_argument_exception",

    "reason": "Can't process field [new_field], Analysis requests are only supported on tokenized fields"

  },

  "status": 400

}

 

转载于:https://www.cnblogs.com/kesimin/p/9559963.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值