首先列一下官网说明
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的字段,否则会报错。
三、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": "王*五"
}
}
}