ELK 8.0.0 数据增删改查
目录1 创建文档数据
PUT fcarey/_doc/1
{
"name":"fcarey",
"age":18,
"city":"sz",
"tag":["python","elk"]
}
PUT fcarey/_doc/2
{
"name":"user01",
"age":18,
"city":"xm",
"tag":["python","go"]
}
PUT fcarey/_doc/3
{
"name":"user02",
"age":27,
"city":"sh",
"tag":["go","php"]
}
PUT fcarey/_doc/4
{
"name":"user03",
"age":18,
"city":"sh",
"tag":["go","php","python and php"]
}
2 查找所创建的文档
# 查询fcarey索引中的所有文档
GET fcarey/_search
GET fcarey/_doc/1
# 查看当前系统中的索引
GET _cat/indices?v&s=index:asc
# 其中参数 v 全称是 verbose,表示返回详细的输出;s 参数表示进行排序(sort),形式 s=column1,column2:<desc/asc>。
/*
health: 当前健康状态
status: 开启/关闭(open/close)状态
index: 索引名称
uuid: 索引 uuid
pri: 主分片数目
rep: 副本分片数目
docs.count: 可用的文档数目
docs.deleted: 已删除的文档数目
store.size: 主分片和副本分片的存储文档空间大小
pri.store.size: 主分片的存储文档空间大小
GET _cat/indices?help
*/
3 更新文档中的数据
# 将1文档中的age字段修改为20
POST fcarey/_update/1
{
"doc": {
"age": 20
}
}
4 删除索引
PUT test/_doc/1
{
"name":"fcarey",
"age":18,
"city":"sz",
"tag":["python","elk"]
}
# 删除test索引
DELETE test
GET test/_search
5 match
5.1 match_all
# match_all是没有任何条件,检索全部数据
GET fcarey/_search
{
"query": {
"match_all": {}
}
}
5.2 match
match用来做基本的模糊匹配,在es中会对文本进行分词,在match查询的时候也会对查询条件进行分词,然后通过倒排索引找到匹配的数据。在match中支持以下参数:
- query:查询条件
- operator:匹配条件(AND、OR (Default))
- minimum_should_match:最小匹配的数量,用来指定文档中至少包含几个关键字才算匹配到
- fuzziness:最大编辑距离,详细参考Term级别查询中fuzzy查询一节的内容。
- prefix_length:通过最大编辑距离进行模糊查询额时候,开始的多少个字符不允许被模糊,默认值为0。下面有例子
- fuzzy_transpositions:boolean值,默认true,表示扩展模糊选项的时候,是否包含两个相邻字符的位置互换这种手段
- fuzzy_rewrite:可以重写查询方法,目前还没实践到,关于更多说明可以参考:rewrite parameter
- analyzer:可以指定分词器,如果不指定,用默认的
- max_expansions:参考Term级别查询中fuzzy查询一节的内容。
- zero_terms_query:在实际的文档中,可能有很多这样的词,比如中文中的的,了,呢,或者英文中的or、and、is、do等。那么这样的词对我们的搜索可能是没有任何帮助的,我们把这些的词- 叫做停用词,ES中有一个停用词分析器:Stop token filter,如果我们的查询请求的关键字中包括这些词,并且用到了这个分析器,那么他会帮我们把这些停用词移除掉。如果我们的查询请求中所有的关键字都被移除掉了,就不会匹配到任何文档,那么这个时候,是否要给用户返回一个空呢?ES提供了两种策略,也就是通过这个字段去表示的:
- none (default):不返回任何文档
- all:返回所有文档,相当于执行了match_all
- lenient:lenient有仁慈的,宽容的意思。这里表示是否忽略一些输入错误,比如为一个数字类型的字段输入了一个字符串去匹配,如果设置为true,会忽略,默认值是false
- auto_generate_synonyms_phrase_query:在有些场景,可能一个意思有两种写法,比如ElasticSearch有些人可能会写成ES,虽然写法不一样,但是描述的是一个东西,那么如果我们限定查询条件为ElasticSearch,其实也是希望能搜索到ES相关内容的。我们可以把这种词叫做同义词查询。因此ES为我们提供了这个参数,表示是否开启同义词查询,默认是true,也就是开启的。但是有一个问题就是ES他怎么知道哪些词是同义词呢?Lucene中有一个概念叫Synonym Graph Token Filter,那么ES中也是有的,我们可以通过对这个进行配置来实现同义词查询
GET fcarey/_search
{
"query": {
"match": {
"tag": "python elk"
}
}
}
5.3 match_phrase
# match_phrase(phrase: 短语) 会对输入做分词,但是需要结果中也包含所有的分词,并且顺序要求一致。这个条件其实有一点苛刻了,有时候可能我输入错了,或者一个短语,只记得其中两个单词,第三个单词死活记不起来怎么办呢?ES也提供了slop这个参数帮我们解决这个问题:slop (default 0):(slop:溢出)来指定额外加几个单词也可以命中。
GET fcarey/_search
{
"query": {
"match_phrase": {
"tag": {
"query": "python php",
"slop": 1
}
}
}
}
标签:ELK,fcarey,8.0,GET,改查,查询,文档,ES,match
From: https://www.cnblogs.com/f-carey/p/17510106.html