mappings自定义创建映射
es的映射就相当于编程语言中给变量定义类型,定义后的变量使用起来更高效,未定义的变量相较于定义的性能肯定是不如的。所以需要掌握es映射。
未定义映射es会对提供的数据进行类型猜测,如果对自动判断的类型及参数设置不满意,或者需要使用一些更高级的映射设置,那么就需要使用自定义映射。
添加映射格式:
curl -X PUT "localhost:9200/my_index?pretty" -H 'Content-Type: application/json' -d'
{
"mappings": {
"_doc": {
"properties": {
"title": { "type": "text" },
"name": { "type": "text" },
"age": { "type": "integer" },
"created": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
}
}
}
中文翻译后的意思:
{
"properties":{
"字段名称":{
"type":"字段类型",
"store":"是否存储",
"index":"索引方式、是否分析"
...
}
}
}'
mapping中字段可参考es官网文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.5/mapping.html
一个索引对应一个映射,一个索引下多个type无法对应多个映射的。7.0版本以后,索引下的type类型就弃用了。最主要原因为了提高性能
通过postman发送请求创建映射
http://192.168.145.131:9200/index_mapping
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"username":{
"type":"keyword",
"index":false
}
}
}
}
通过es-header查看索引信息,index为true可以做分词去查询
查看分词效果(注意text和keyword的区别)
http://192.168.145.131:9200/index_mapping/_analyze
{
"field":"name",
"text":"i like apple"
}
某个属性一旦被建立,就不能修改了,但是可以新增额外属性
为已存在的索引创建或创建mappings
Elasticsearch-head可视化查看
主要数据类型
text, keyword, string
long, integer, short, byte
double, float
boolean
date
object
数组不能混,类型一致
字符串
text:文字类需要被分词被倒排索引的内容,比如商品名称、商品详情、商品介绍,使用text。
keyword:不会被分词,不会被倒排索引,直接匹配搜索,比如订单状态、用户qq、微信号、手机号等,这些精确匹配,无需分词。