ElasticSearch常用语法(
上一节了解ElasticSearch与Kibana的安装与部署,我们这节来了解一下ElasticSearch的相关语法,以下语法用Kibana进行可视化操作,
登录kibana后,找到如图(study-grammer-one)
参数注释
index -- 索引名
_doc -- 类别(默认), es版本>=8不可设置
id -- 索引中文档序号(唯一)
field -- 字段名
field_value -- 字段值
search_field -- 检索列
search_txt -- 检索文本
配置语法
# 查看es表头,显示es配置
GET /_cat/health
# 查看集群中索引,
GET /_cat/indices
# 查看某个索引中的全部数据
GET /index/_doc/_search
# 错误语法定位
GET /index/_validate/query?explain
{
"query" : {
"match":{
"search_field" : "search_txt"
}
}
}
# 删除全部索引
delete /_all
配置 action.destructive_requires_name: true 后,不在起作用
# 文本指定分词解析
analyze_category -- 分词类别
text -- 文本
GET /_analyze
{
"analyzer":"analyze_category",
"text":"analyze_words"
}
# 文本指定某索引文词解析
GET /index/_analyze
{
"analyzer":"analyze_category",
"text":"analyze_words"
}
# 查看索引映射
GET /index/_mapping
# 查看索引设置
GET /index/_settings
基础语法 (创建,修改,查询,删除)
# 创建
PUT /index/_doc/id
{
"field_A":"field_value",
"field_B":"field_value"
}
# 修改
全局修改
PUT /index/_doc/id
{
"field_A":"field_value",
"field_B":"field_value"
}
局部修改
POST /index/_doc/id/_update
{
"doc":{
"field_A":"field_value"
}
}
# 查询(简单查询, 复杂后续介绍)
query, match均为关键词
GET /index/_search
{
"query":{
"match":{
"search_field":"search_txt"
}
}
}
# 删除
一个
delete /index
多个
delete /index_one,index_two
模糊匹配(前缀为 index)
delete /index*
全部
delete /_all
查询语法
引用外部文档地址,在如下部分有引用, 具体含义自行看文档
1, 组合查询
2, 精确查询
3, 全文检索
4, 范围检索
5, multi_match 检索
6, 前缀匹配
7, 正则匹配
8, 游标查询
9, 聚合查询
9.1 聚合排序
10, es-sql查询
11, 设置索引别名
# 查询索引信息,如下代码库(search--icode--one)
GET /index/_search
字段解释
took -- 耗费了几毫秒
timed_out -- 是否超时
_shards -- 到几个分片搜索,成功几个,跳过几个,失败几个。
hits.total -- 查询结果数量
hits.score -- 分数,查询相关度,分数越高相关度越高
hits.hits -- 查询document结果
# 条件查询
# simple search
GET /index/_search?q=search_field_A:search_txt
# prccise query(精确查询)
等同于 = ,不进行分词检索(keywords)
GET /index/_search
{
"query":{
"term":{
"search_price":20
}
}
}
# fulltext query(全文检索)
GET /index/_search
{
"query" : {
"match":{
"search_field_A":"search_txt"
}
}
}
# range query(范围检索)
GET /index/_search
{
"query" : {
"range":{
"search_field":{
"gte":20,
"lte":30
}
}
}
}
# multi_match query(此处 多字段为 or 的关系)
minimum_should_match -- 查询精度可用数字 | %
tie_breaker -- 0~1的浮点数参与查询评分
GET /index/_search
{
"query" : {
"multi_match":{
"query":"query_txt",
"type":"best_fields",
"fields":["search_field_A","search_field_B"],
"minimum_should_match":1,
"tie_breaker":0.3
}
}
}
# page query (翻页查询)
from -- 从那条记录开始查
GET /index/_search
{
"query" : {
"match_all":{
}
},
"size":1,
"from":0
}
# exists field query (查询字段存在的数据)
GET /index/_search
{
"query" : {
"exists":{
"field":"search_field_A"
}
}
}
# id query (多个id匹配)
GET /index/_search
{
"query" : {
"ids":{
"values":[1,2]
}
}
}
# prefix query (前缀查询)
GET /index/_search
{
"query" : {
"prefix":{
"search_field_A":{
"value" : "search_txt"
}
}
}
}
# regexp query (正则查询)
GET /index/_search
{
"query" : {
"regexp":{
"search_field_A":{
"value" :"o.*e",
"flags":"ALL"
}
}
}
}
# scroll query (游标查询, 返回请看图 search-icode-two)
# 注 : 返回结果集中有下次必传的_scroll_id
# scroll -- 关键词,
# 1m -- 表示1分钟
# 首次查询
GET /index/_search?scroll=1m
{
"scroll":"1m"
}
# 携带查询 scroll_id
GET /_search/scroll
{
"scroll":"1m",
"scroll_id": "_scroll_id"
}
# advanced query
组合查询 + sort
注:
1,组合可相互嵌套
2。sort排序字段类别必须为keywords, 否则排序需要增加设置
2.1,fielddate:true 设置后text字段类型即可,但不准确
2.2,设置子字段(具体请看后续索引字段设置)
sql语句对照便于理解
select * from index where
(
(search_field_A = search_txt)
and
(
(search_field_A != search_field_A and search_field_A != search_txt_C)
or
search_field_B = search_txt_D
)
)
order by search_field_C desc | asc
等同于
GET /index/_search
{
"query":{
"bool":{
"must":{
"match":{
"search_field_A":"search_txt"
}
},
"should":[
{
"bool":{
"must_not":[
{"match":{"search_field_A":"search_txt_C"}},
{"match":{"search_field_A":"search_txt_C"}}
]
}
},
{"term":{"search_field_B":"search_txt_D"}}
]
}
},
"sort":[
{
"search_field_C":{
"order":"desc|asc"
}
}
]
}
# 聚合查询
类似于SQL中的 count, max 等查询
terms <---> sql->count
max <---> sql->max
min <---> sql->min
sum <---> sql->sum
avg <---> sql->avg
注:
★ bucket(桶): 等同于组。
★ metric:某一个组中的数据统计
terms 操作的字段类型必须是keyword | fielddata=true, 建议使用第一种因第二种会增大es存储。
聚合查询可嵌套, 并可排序详情请看 9.1 聚合排序
GET /index/_search
{
"aggs":{
"count_category":{
"terms":{"field":"field_category"}
},
"max_price":{
"max":{"field":"field_price"}
},
"min_price":{
"min":{"field":"field_price"}
},
"sum_price":{
"sum":{"field":"field_price"}
},
"avg_price":{
"avg":{"field":"field_price"}
}
}
}
# es7-sql查询
注:
format=txt -- 表示返回的格式,具体格式请看(10.es-sql查询)
POST /_sql?format=txt
{
"query":"select * from index_name"
}
# 设置索引别名
注 :
default_index, default_ohher_index -- 别名称
way-one
PUT /index
{
"aliases":{
"default_index":{},
"default_other_index":{}
}
}
way-two
POST /_aliases
{
"actions":[
{"remove":{"index":"index_name","alias":"alias_name"}},
{"add":{"index":"index_name","alias":"alias_name"}}
]
}
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "index",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"field_A" : "field_value2",
"field_B" : "field_value1"
}
}
]
}
}
总结
文档转载
ElasticSearch官方文档
禁止转载,违者必究
补录
第一节,ElasticSearch----安装部署
第二节,ElasticSearch----语法学习
第三节,ElasticSearch----索引详解
第四节,ElasticSearch----IK分词器
第五节,ElasticSearch----PHP交互