首先列一下官网说明
kibana控制台:https://www.elastic.co/guide/cn/kibana/current/console-kibana.html elasticsearch7.5 query DSL:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl.html

一、系统级查询

#检查群集运行状况
GET /_cat/health?v
 
#获得群集中的节点列表
GET /_cat/nodes?v
 
#列出所有索引
GET /_cat/indices?v
 
#创建索引并查看
PUT /customer?pretty
GET /_cat/indices?v

二、DSL查询(使用DSL查询,必须要传递query参数给ES)

# dsl查询 --> 高级查询+分页+排序+截取字段 【desc:降序 asc:升序 from:从第几页开始 size:每页多少条数据 _source:要哪几个字段】
GET errinfo-scm-2020.02.17/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "errortime.keyword": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 10,
  "_source": [
    "errortime",
    "errorlevel",
    "errorclass"
  ]
}

注意:sort里面要使用**.keyword,   _source里面则使用不带keyword的字段,否则会报错。

 

es控制_id es控制台查询条数_字段

 三、DSL过滤查询

 基本格式:

#格式
{
    "query" : {
		"bool" : {
			"must" : [{
				"match_all":{}
			}],
			"filter":{...}
		}
	}
}

四、标准查询(match和multi_match)

match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。
如果你使用match查询一个全文本字段,它会在真正查询之前用分析器先分析查询字符:

{
	"query": {
		"match": {
			"fullName": "Jeff King"
		}
	}
}

上面的搜索会对Jeff King分词,并找到包含Jeff或King的文档,然后给出排序分值。

如果用 match  下指定了一个确切值,在遇到数字,日期,布尔值或者 not_analyzed的字符串时,它将为你搜索你给定的值,如:
{ "match": { "age": 26 }}
{ "match": { "date": "2019-11-01" }}
{ "match": { "public": true }}
{ "match": { "tag": "full_text" }}

 multi_match  查询允许你做 match查询的基础上同时搜索多个字段:

{
	"query":{
		"multi_match": {
			"query": "Jeff King",
			"fields": [ "fullName", "nick name" ]
		}
	}
}

上面的搜索同时在fullName和nick name字段中匹配。

提示:match一般只用于全文字段的匹配与查询,一般不用于过滤,过滤使用filter。

五、单词搜索与过滤(Term和Terms)

{
	"query": {
		"bool": {
			"must": { 
				"match_all": {} 
			}, 
			"filter": { 
				"term": { 
					"tags": "elasticsearch" 
				} 
			} 
		} 
	}
}

Terms搜索与过滤,minimum_match:至少匹配个数,默认为1

{
	"query": {
		"terms": {
			"tags": ["jvm", "hadoop", "lucene"],
			"minimum_match": 2
		}
	}
}

六、组合条件搜索与过滤(Bool)

组合搜索bool可以组合多个查询条件为一个查询对象,查询条件包括must、should和must_not。
例如:查询爱好有美女,同时也有喜欢游戏或运动,且出生于1990-06-30及之后的人。

{
	"query": {
		"bool": {
			"must": [{"term": {"hobby": "美女"}}],
			"should": [
				 {"term": {"hobby": "游戏"}}, 
				 {"term": {"hobby": "运动"}} 
			],
			"must_not": [
				{"range" :{"birth_date":{"lt": "1990-06-30"}}} 
			],
			"filter": [...],
			"minimum_should_match": 1
		}
	}
}

 提示: 如果 bool 查询下没有must子句,那至少应该有一个should子句。但是 如果有 must子句,那么没有 should子句也可以进行查询。

七、范围查询与过滤(range)

range过滤允许我们按照指定范围查找一批数据:     gt:>    gte:>=   lt:<  lte:<=
ex:查询年龄大于等于18并且小于20。   

{
	"query":{
		"range": {
			"age": {
				"gte": 18,
				"lt": 20
			}
		}
	}
}

八、存在和缺失过滤器(exists和missing)
exists和missing只能用于过滤结果

{
    "query": {
        "bool": {
            "must": [{
                "match_all": {}
            }],
            "filter": {
                "exists": { "field": "gps" }
            }
        }
    }
}

九、 前匹配搜索与过滤(prefix)
和term查询相似,前匹配搜索不是精确匹配,而是类似于SQL中的like ‘key%’
ex:查询姓郑的所有人。

{
    "query": {
        "prefix": {
            "fullName": "王"
        }
    }
}

十、通配符搜索(wildcard)
使用*代表0~N个,使用?代表1个。

{
	"query": {
		"wildcard": {
			"fullName": "王*五"
		}
	}
}