es的语法操作命令

这篇具有很好参考价值的文章主要介绍了es的语法操作命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

查询

#查询所有索引和详情信息
#此方法查询的显示更加详细的索引信息显示
GET /_cat/indices?v
GET /_cat/indices

#查询某个索引
GET person

#查询全部索引的状态数据
GET /_cat/indices?v

#查询
GET http://ip:端口/索引名称  # 查询单个索引信息
GET http://ip:端口/索引名称1,索引名称2...  # 查询多个索引信息
GET http://ip:端口/_all  # 查询所有索引信息

#查询索引user映射
GET user/_mapping

#查询user索引文档,指定id
GET /user/_doc/1

#查询user索引所有文档
GET /user/_search

添加

#添加
PUT http://ip:端口/索引名称

#添加索引
PUT user

#创建索引并添加映射(推荐)
PUT /person1
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      }
    }
  }
}

#添加字段(属性)
PUT /person1/_mapping
{
  "properties": {
    "name": {
      "type": "text"
    },
    "age": {
      "type": "integer"
    },
    "createTime": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }
  }
}
##如果需要用时间范围查询,必须要设置"type": "date""format"
#请注意,在设置日期映射时,建议使用Elasticsearch支持的日期格式,并根据需要选择正确的日期格式。此外,如果您已经创建了索引并且需要更新日期映射,可以使用Update Mapping API来更新。

#添加文档,指定id
POST /person/_doc/1
{
  "name":"张三",
  "age":18,
  "address":"北京"
}

#添加文档,不指定id
POST /person1/_doc/
{
  "name":"张三",
  "age":18,
  "address":"北京"
}

#字段"tel"不可以进行查询,不然会报错只因创建映射时"tel""index"false
{
    "user": {
        "mappings": {
            "properties": {
                "name": {
                    "type": "text"
                },
                "sex": {
                    "type": "keyword"
                },
                "tel": {
                    "type": "keyword",
                    "index": false
                }
            }
        }
    }
}



#实现模糊检索,类似于SQL中的like条件,这个需求我们使用wildcard类型字段来实现. 
对同一个字段即可实现模糊检索,也能实现分词检索(我们原来使用text类型字段+ik分词器实现),这两种检索应用于同一字段
定义字段 name:【使用示例,就是在已经固定的mapping映射上加属性,因为已经添加的属性不能修改,只能添加】
"name": {
	"type": "text",
	"fields": {
  		"wildcard": {
  		"type": "wildcard"
  		},
  		"ik": {
  		"type": "text",
  		"analyzer": "ik_max_word"
  		}
	}
}
#然后进行检索如下,可以同时对 name.wildcardname.ik 字段进行检索
{
	"query": {
		"multi_match": {
		"query": "查询关键词",
		"fields": ["name.wildcard", "name.ik"]
		}
	}
}
 




修改

#局部更新
POST /user/_update/4
{
  "doc": {
    "email":"88886"
  }
}

#全量更新,存在就更新,不存在就创建
POST /user/_doc/4
{
   "name" : "王九",
   "sex" : "男性",
   "tel" : "99"
}


删除

#删除索引
DELETE /索引名称
#例如删除索引dev
DELETE /dev

#删除指定id文档
DELETE /person/_doc/1

#删除某个文档中的属性
POST user/_doc/1/_update
{
    "script" : "ctx._source.remove('new_field')"
}

# 按照查询条件进行删除
POST user/_delete_by_query
{
  "query":{
    "match_phrase":{
      "catagoryId": "1643191714195750913"
    }
  }
}

高级ur路径查询

#查询name端包含王或者九的
GET /user/_search?q=name:王九

#URL带参数形式查询,这很容易让不善者心怀恶意,或者参数值出现中文会出现乱码情况。为了避免这些情况,我们可用使用带JSON请求体请求进行查询

高级查询term

#term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词拆解
GET user/_search
{
  "query": {
    "term": {
      "FIELD": {
        "value": "VALUE"
      }
    }
  }
}


#terms里的[ ] 多个是或者的关系,只要满足其中一个词就可以
GET user/_search
{
  "query": {
    "terms": {
      "FIELD": [
        "VALUE1",
        "VALUE2"
      ]
    }
  }
}

#terms里的[ ] 多个是或者的关系,只要满足其中一个词就可以。想要通知满足两个词的话,就得使用boolmust来做
GET user/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "FIELD": {
            "value": "VALUE"
          }
        }},
        {
          "term": {
            "FIELD": {
              "value": "VALUE"
            }
          }
        }
      ]
    }
  }
}

高级查询match

#查找所有文档内容
GET user/_search
{
	"query":{
		"match_all":{}
	}
}


# 查询全部文档指定字段
GET user/_search
{
	"query":{
		"match_all":{}
	},
	"_source":["FIELD"]
}





#match进行搜索的时候,会先进行分词拆分,拆完后,再来匹配
GET user/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}

#match_phrase 称为短语搜索,要求所有的分词必须同时出现在文档中,同时位置必须紧邻一致
GET user/_search
{
"query": {
  "match_phrase": {
    "FIELD": "PHRASE"
  }
}


# 上面的 MatchQuery 有一个短板,假如用户输入了某关键字,我们在查找的时候并不知道他输入的是 name 还是 description,这时我们用什么都不合适,而 MultiQuery 的出现解决了这个问题,他可以通过 fields 属性来设置多个域联合查找
GET user/_search
{
    "query": {
        "multi_match": {
            "query": "Spring开发",
            "minimum_should_match": "70%",
            "fields": ["name", "description"]
        }
    }
}
}


# 在多域联合查询的时候,可以通过 boost 来设置某个域在计算得分时候的比重,比重越高的域当他符合条件时计算的得分越高,相应的该记录也更靠前。通过在 fields 中给相应的字段用 ^权重倍数来实现
GET user/_search
{
    "query": {
        "multi_match": {
            "query": "Spring开发",
            "minimum_should_match": "70%",
            "fields": ["name^10", "description"]
        }
    }
}
}


多条件查询,must相当于数据库的&&,should相当于数据库的||

#must相当于数据库的&&
GET user/_search
{
	"query":{
		"bool":{
			"must":[{
				"match":{
					"name":"小王"
				}
			},{
				"match":{
					"age":18
				}
			}]
		}
	}
}


#should相当于数据库的||
GET user/_search
{
	"query":{
		"bool":{
			"should":[{
				"match":{
					"name":"小王"
				}
			},{
				"match":{
					"age":18
				}
			}]
		}
	}
}

如果我们既要对一些字段进行分词查询,同时要对另一些字段进行精确查询,就需要使用布尔查询来实现了。布尔查询对应于Lucene的BooleanQuery查询,实现将多个查询组合起来,有三个可选的参数:must:文档必须匹配must所包括的查询条件,相当于 “AND”should:文档应该匹配should所包括的查询条件其中的一个或多个,相当于 "OR"must_not:文档不能匹配must_not所包括的该查询条件,相当于“NOT”

GET user/_search
{
    "query": {
        "bool": { // 布尔查询
            "must": [ // 查询条件 must 表示数组中的查询方式所规定的条件都必须满足
                {
                    "multi_match": {
                        "query": "王小妹",
                        "minimum_should_match": "50%",
                        "fields": [
                            "name^10",
                            "title"
                        ]
                    }
                },
                {
                    "term": {
                        "address": "广州"
                    }
                }
            ]
        }
    }
}

分页查询

GET user/_search
{
	"query":{
		"match_all":{}
	},
	"from":0,
	"size":2
}

查询排序,支持对 keyword、date、float 等类型添加排序,text类型的字段不允许排序,text因为会分词,所以排序不了

{
	"query":{
		"match_all":{}
	},
	"sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

范围查询

GET user/_search
{
	"query":{
		"bool":{
			"should":[{
				"match":{
					"name":"小王"
				}
			},{
				"match":{
					"age":18
				}
			}],
			"filter": [
			  {"range": {
			    "age": {
			      "gte": 10,
			      "lte": 20
			    }
			  }}
			]
		}
	}
}

全文检索

{
	"query":{
		"match":{
			"name" : "王妹"
		}
	}
}

高亮查询,高亮展示的数据,本身就是文档中的一个field,单独将field以highlight的形式返回给你。

ES提供了一个highlight属性,和query同级别的

GET user/_search
{
  "query": {
    "match_phrase": {
      "name": "张三"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    },
    "pre_tags": "<font color='red'>",
    "post_tags": "</font>",
    "fragment_size": 10
  }
    }
}


#全文高亮检索
GET person1/_search
{
  "query": {
    "multi_match": {
      "query": "广州",
      "fields": []
    }
  },
  "highlight": {
    "fields": {
      "*": {}
    }
  }
}

fragment_size :指定高亮数据展示多少个字符回来;
pre_tag:指定前缀标签,如 < font color=“red”>
post_tags:指定后缀标签,如 < /font>
field:指定那个字段为高亮字段

定义过滤器查询,是在原本查询结果的基础上对数据进行筛选,因此省略了重新计算的分的步骤,效率更高。并且方便缓存。推荐尽量使用过虑器去实现查询或者过虑器和查询共同使用,过滤器在布尔查询中使用,过滤查询和检索查询能做一样的效果。区别在于过滤查询不评分,结果能缓存,检索查询要评分,结果不缓存。 一般是不会直接使用过滤查询,都是在检索了一定数据的基础上再使用,下边是在搜索结果的基础上进行过滤

GET user/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "multi_match": {
                        "query": "王小妹",
                        "minimum_should_match": "50%",
                        "fields": [
                            "name^10",
                            "title"
                        ]
                    }
                }
            ],
            "filter": [
                {
                    // 过滤条件:studymodel 必须是 201001
                    "match": {"address": "广州"}
                },
                {
                    // 过滤条件:年龄 >=10 <=100
                    "range": {"age": {"gte": 10,"lte": 100}}
                }
            ]
        }
    }
}

分组查询

GET user/_search
{
  "aggs": {
    "gg_gl": {
      "terms": {
        "field": "age"
      }
    }
  },
  "size": 0
}

高级映射嵌套**【字段type设置为keyword就不会被分词】

#嵌套节点下面新增字段
PUT /user/_mapping

{
    "properties": {
        "school": {
            "type": "keyword",
            "norms": false,
            "doc_values": false
        },
        "teacher": {
            "type": "nested",
            "properties": {
                "rightStatus": {
                    "type": "keyword",
                    "norms": false,
                    "doc_values": false
                },
                "rightCurrTime": {
                    "type": "keyword",
                    "norms": false,
                    "doc_values": false
                }
            }
        }
    }
}

#关闭、打开索引(关闭索引是为了释放内存,将数据持久化到硬盘,不可读写已经关闭的索引)

POST http://ip:端口/索引名称/_close  

POST http://ip:端口/索引名称/_open ```

IK分词器有两种分词模式:ik_max_word和ik_smart模式

linux系统安装分词器,首先docker安装es

进入到es

docker exec -it elasticsearch /bin/bash

执行安装ik分词器(注意安装的分词器需要与es版本一直,不一致更改一下ik分词器的版本号)

./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip

安装成功后,可以再宿主机es挂卷的plugin下看到ik文件,然后必定要重启es容器

docker restart elasticsearch 

在kibana上操作,查看分词器结果**【注意如是是英文字母大写,使用默认分词器分词后都会变成小写】

GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "东哥是前端大佬"
}


#结果
{
  "tokens" : [
    {
      "token" : "东",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "哥",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "是",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "CN_CHAR",
      "position" : 2
    },
    {
      "token" : "前端",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "大佬",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 4
    }
  ]
}

ES数据类型

聚合:相当于mysql 中的sum(求和)
text:会分词,不支持聚合
keyword:不会分词,将全部内容作为一个词条,支持聚合
integer:数值类型
boolean:布尔
binary:二进制
integer_range, float_range, long_range, double_range, date_range :范围类型
date:日期
[ ] Nested: nested (for arrays of JSON objects 数组类型的JSON对象):数组
{ } Object: object(for single JSON objects 单个JSON对象):对象

GET:用来获取资源
POST:用来新建资源(也可以用于更新资源)
PUT:用来更新资源
DELETE:用来删除资源文章来源地址https://www.toymoban.com/news/detail-402293.html

  • ES 5.x中一个index可以有多种type。
  • ES 6.x中一个index只能有一种type。
  • ES 7.x以后,将逐步移除type这个概念,现在的操作已经不再使用,默认_doc
    #查看索引下的字段映射,es版本为7的可使用一下命令,在mapping?后加上format=json&include_type_name=true
    GET /user/_doc/_mapping?format=json&include_type_name=true

到了这里,关于es的语法操作命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java使用elasticsearchClient调用es7.17-生成连接、查询系统参数、索引相关操作

    java调用elasticsearch有几种不同的方式,考虑到以后维护方便,使用elasticSearchClient进行数据交互 首先要进行maven引入,后面两个是与json转化有关的,刚开始测试可以无需引入 1、ModelTestCase 此实体整合了与es系统有关的相关参数 2、Person 此实体主要为测试索引中的数据结构 1、生

    2024年02月15日
    浏览(49)
  • 原生语言操作和spring data中RestHighLevelClient操作Elasticsearch,索引,文档的基本操作,es的高级查询.查询结果处理. 数据聚合.相关性系数打分

    ​ Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasti

    2024年02月05日
    浏览(87)
  • linux--top命令查看系统所有详情

    Linux系统可以通过 top 命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。通过top命令可以有效的发现系统的缺陷出在哪里。是内存不够、CPU处理能力不够、IO读写过高。 一、top命令的第一行“top - 19:56:47 up 39 min, 3 users, load average: 0.00, 0.00, 0.00”显示的内容依

    2024年02月16日
    浏览(46)
  • kafka 基础概念、命令行操作(查看所有topic、创建topic、删除topic、查看某个Topic的详情、修改分区数、发送消息、消费消息、 查看消费者组 、更新消费者的偏移位置)

    kafka官网 Broker   一台kafka服务器就是一个broker,可容纳多个topic。一个集群由多个broker组成; Producer   生产者,即向kafka的broker-list发送消息的客户端; Consumer   消费者,即向kafka的broker-list订阅消息的客户端; Consumer Group   消费者组是 逻辑上的一个订阅者 ,由多个

    2024年02月01日
    浏览(61)
  • ES删除索引中的所有数据(不删除索引结构)含curl删除方式

    场景:想只删除索引下的数据,不删除索引结构,(windows环境)服务器中没有postman工具 第一种:只删除索引中的所有数据,不删除索引结构 第二种:删除索引中的指定的数据,不删除索引结构 第三种:删除所有数据,删除索引结构 windows环境中curl方式删除 第一种:删除所有

    2024年02月11日
    浏览(43)
  • Es 索引查询与删除

    1、 #删除单个索引 2、#删除多个指定索引,中间用逗号隔开 3、#模糊匹配删除 4、#使用通配符,删除所有的索引 5、#获取当前索引 6、如果存储不够可以设置定时删除,下面是保留3天的日志 以下是定时删除脚本:

    2024年02月11日
    浏览(50)
  • 【Elasticsearch】ES精确查询和范围查询,ES时间字段排序实例,ES倒排索引介绍

    termQuery matchQuery 模糊查询 multiMatchQuery 多个字段模糊查询 如果时间字段写入时用的类型是Text,可以用“时间字段.keyword”来处理 #查询前传入分页参数 #分页后拿到总记录数 把文档D对应到的映射转换为到文档ID的映射,每个都对应着一系列的文档,这些文

    2024年02月15日
    浏览(118)
  • ES查询多个索引,但是某些索引的name不同

    参考: https://blog.csdn.net/qq_37147750/article/details/111319151 背景: 目前有四个索引index, 对于这四个index他们的字段并不完全相同,要支持筛选。 目前的问题是,其中有两个索引要先根据条件筛选一遍。后续的筛选根据这次的结果做基础。 但是这两个索引的筛选条件也不一样。 相

    2024年02月13日
    浏览(52)
  • ES 聚合分组查询 语法

    ES 聚合分组查询的语法如下: 其中 index 是索引名称, size 设置为 0 意味着只返回聚合结果而不返回文档。 aggs 字段是聚合查询的核心部分,这里以 group_by_field 为例进行分组查询,其中 terms 指定了分组的字段名称。 这样的查询会返回按照 field_name 字段进行分组后每个分组的

    2024年02月11日
    浏览(39)
  • ES查询常用语法

    目录 1. ElasticSearch之查询返回结果各字段含义 2. match 查询 3. term查询 4. terms 查询 5. range 范围 6. 布尔查询 6.1 filter加快查询效率的原因 7. boosting query(提高查询) 8. dis_max(最佳匹配查询) 9. 分页 10. 聚合查询【内含实际的demo】 执行命令:索引库名称/_search 空搜索的结果为: 按照

    2023年04月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包