数据类型(介绍text和keyword易混淆)

Text 类型被用来索引长文本,例如产品介绍或说明。这些文本会被分词器解析,在建立索引文档之前会通过分词器进行分词处理转换成词组。es 可以检索到该文本切分的词组,但是类型的数据不能用来进行过滤、排序和聚合等操作

Keyword 类型数据不需要进行分词处理,常备用来进过滤、排序和聚合操作。由于不需要建立索引,因此其数据划分时相对说占用更少的内存开销。

创建索引

静态映射

PUT /my_index{"settings": {"number_of_replicas": 1,"number_of_shards": 4},"mappings": {"properties": {"name":{"type": "keyword"},"age":{"type": "integer"}}}}

动态创建

文档写入ES 时,如果index不存在则会自行创建索引、映射类型、字段,并且根据字段推断其数据类型。

对于已经存在的index,如果有一个字段不存在,ES 可以动态添加新字段,可以通过设置dynamic 属性来开启或关闭此特性(默认是开启状态)。

分为动态映射和静态映射

例如,直接向ES 中写入一条数据

POST /my_index/_doc
{
"name":"德普",
"age":10
}

查看my_index自动创建的映射关系


es索引删除 es索引删除后字段类型_分词器


CRUD

插入文档

单条数据插入

Index 不存在时,使用POST

POST /my_index2/_doc{"name":"写入文档"}POST /my_index2/_doc{"age":"100"}

批量写入数据

格式:

{"index":{"_index":"home","_type":"home",""_id":"2"}}
{"id": 2, "location": "四川省成都市九眼桥", "money": 3000, "area":80, "type": "三居室", "style": "整租"}

第一行指定请求与索引和类型,可以选择的请求有"create","index","delete","ubdate",

"_index"指定索引名,"_type"指定类型名,"_id"指定id

第二行指定插入的内容.

POST /book3/_bulk{"index": {"_id": 1}}{"name": "Gone with the Wind", "author": "Margaret Mitchell", "date": "2018-01-01"}{"index": {"_id": 2}}{"name": "Robinson Crusoe", "author": "Daniel Defoe", "date": "2018-01-02"}{"index": {"_id": 3}}{"name": "Pride and Prejudice", "author": "Jane Austen", "date": "2018-01-01"}{"index": {"_id": 4}}{"name": "Jane Eyre", "author": "Charlotte Bronte", "date": "2018-01-02"}

删除文档

删除索引

DELETE /my_index2

根据_id 删除文档

DELETE /my_index2/_doc/TsS6vXMBTHFwbdMQSSps

更新文档

POST针对指定_id文档的字段数据更新,如果对应文档有此字段则执行update 操作,如果此文档没有此字段,则自行增加一个字段并且推断出其数据类型

POST /my_index2/_update/ncTAvXMBTHFwbdMQQCpv{"doc":{"age":10}}

增加一个字段

POST /my_index2/_update/ncTAvXMBTHFwbdMQQCpv{"doc":{"weight":18}}

PUT 针对指定_id 文档下所有字段覆盖


es索引删除 es索引删除后字段类型_api es7 删除所有数据_02


//PUT 操作后


es索引删除 es索引删除后字段类型_字段_03


查询文档

hits 是指search 操作执行后所有满足条件的文档个数

ES 查询一般有两种风格普通查询(URI Ssearch)和DSL(特定领域的查询语言),DSL 是通过json 格式的数据组织查询条件,这种方式更加灵活。

ES 的查询分为查询( query )和过滤( filter )

查询(query)会计算每个满足条件的文档的相关度得分,并且根据得分排序

过滤(filter)只会筛选出满足条件的数据,并不会计算得分,而且会对计算结果进行缓存,但从性能上来说效率会更高。

应用过程中,一般是先过滤缩小查询范围,然后查询匹配数据

match、bool、filter、term 匹配区别

bool 查询包含4中操作符 must、must_not、should、filter

must: 必须匹配,与and等价。贡献算分

must_not:必须不匹配,与not等价,常过滤子句用,但不贡献算分

should: 选择性匹配,至少满足一条,与 OR 等价。贡献算分

filter: 过滤子句,必须匹配,不会对结果进行缓存,但不贡献算分,效率较快

嵌套结构查询

term 表示完全匹配,即查询的对象不需要通过分词器解析,文档中通过分词器解析的词组必须和此查询对象完全比配


es索引删除 es索引删除后字段类型_字段_04


es索引删除 es索引删除后字段类型_字段_05


es索引删除 es索引删除后字段类型_字段_06


字段有多个值时,使用terms


es索引删除 es索引删除后字段类型_es索引删除_07


match 查询的时候,ES 会将给定的查询对象解析成词组,然后利用这些词组搜索文档,获取文档信息,并且计算相关度得分。


es索引删除 es索引删除后字段类型_数据_08


es索引删除 es索引删除后字段类型_字段_09


按照条件聚合查询


es索引删除 es索引删除后字段类型_es索引删除_10


es索引删除 es索引删除后字段类型_数据_11


多条件查询


es索引删除 es索引删除后字段类型_es索引删除_12


es索引删除 es索引删除后字段类型_数据_13


GET ecommerce/_search{"size": 1,"query": {"match_phrase": {"content": "zhonghua yagao"}},"aggs": {"group_by_tags": {"terms": {"field":"name"},"aggs": {"avg_price": {"avg": {"field": "price"}}}}}}select minute,count(*) from ad_optimize_minute_pv group by minuteGET ad_optimize_minute_pv/_search{"size": 1,"aggs": {"sss": {"terms": {"field": "minute.key"}}}}

其他操作

查看映射(所有字段)

GET /test_index/_mapping
查看单个字段映射
GET /test_index/_mapping/field/date
查看文本被分词器解析后的词组
GET /_analyze
{
"analyzer": "standard", #指定分词器
"text":"刘德华是个娱乐圈劳模"
}
//针对index 添加一个字段
PUT /test_index5/_mapping{"properties": {"addr":{"type": "keyword"}}}