ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解 (2)

新增索引库的命令示例:

PUT test1 { "settings" : { "number_of_shards" : 10, "number_of_replicas" : 1, "refresh_interval" : "1s" }, "mappings" : { "_doc" : { "properties" : { "uid" : { "type" : "long" }, "phone" : { "type" : "long" }, "message" : { "type" : "keyword" }, "msgcode" : { "type" : "long" }, "sendtime" : { "type" : "date", "format" : "yyyy-MM-dd HH:mm:ss" } } } } }

示例:

在这里插入图片描述


在这里插入图片描述


注:

number_of_shards: 是设置的分片数,设置之后无法更改!

refresh_interval: 是设置es缓存的刷新时间,如果写入较为频繁,但是查询对实时性要求不那么高的话,可以设置高一些来提升性能。可以更改

number_of_replicas : 是设置该索引库的副本数,建议设置为1以上。

其中这里还有几个重要参数也顺便说一下:

store: true/false 表示该字段是否存储,默认存储。

doc_values: true/false 表示该字段是否参与聚合和排序。

index: true/false 表示该字段是否建立索引,默认建立。

关于这几个字段的取值可以参考一下的示例图:

在这里插入图片描述

三、修改数据

其实ES的新增和修改可以看做是一样,存在则修改,不存在则新增,不过这里还是简单的介绍下吧。
修改数据的方式主要有两种,一种是通过主键ID进行修改,这种比较简单,就是和新增一样即可。
另一种则是通过条件进行修改,相当于SQL更新语句的 where条件。

根据主键修改的命令示例:

POST test1/_doc/1 { "uid" : "1234", "phone" : "12345678909", "message" : "qq", "msgcode" : "1", "sendtime" : "2019-03-14 01:57:04" }

根据条件修改的命令示例:

POST test1/_update_by_query { "query": { "term": { "phone": "12345678909" } } , "script": { "source": "ctx._source['message'] = 'xuwujing'" } }

原有的数据:

在这里插入图片描述

修改后的数据:

在这里插入图片描述


注:这里的根据条件进行修改用到的脚本语言,ES除了使用DSl语句之后,使用一些官方定义的脚本语言和SQL语句也能进行操作,脚本语言和SQL语句的操作留到以后在来讲下。

四、删除数据、字段和索引库

ES根据主键删除数据的命令示例是DELETE 索引库/id,简单实用,但是一定要要加上ID,不然就是删除索引库了!

根据主键删除数据命令示例:

DELETE test1/1

根据条件删除数据的命令示例:

POST test/_delete_by_query { "query": { "term": { "phone": "12345678909" } } }

当然ES还可以根据条件只删除某一个字段的数据,比如删除字段msgcode的数据。

删除字段数据的命令示例:

POST test/_doc/_update_by_query { "script":{ "lang":"painless", "inline":"ctx._source.remove(\"msgcode\")" } }

示例图:

在这里插入图片描述

查询语句 查询所有

match_all可以查询集群所有索引库的信息,包括一些隐藏索性库的信息。
命令示例:

GET _search { "query": { "match_all": {} } }

示例图:

在这里插入图片描述

查询索引库所有的数据,命令格式为GET 索引库名称/索引库类型/_search,也可以不需要索引库类型。

命令示例:

GET test1/_doc/_search

如果根据ID查询某一条数据的话,也比较简单,只需要将上述的_search换成主键ID即可。
命令示例:

GET test1/_doc/2 等值(term)查询

term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型)

比如根据手机号进行查询。
命令示例:

GET test1/_doc/_search { "query": { "term": { "phone": "12345678909" } } }

当然,如果想在一个字段匹配多个值的话,可以使用terms,相当于SQL的in语法。

命令示例:

GET test1/_doc/_search { "query": { "terms": { "uid": [ 1234, 12345, 123456 ] } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssddg.html