[转]ES 查询语法

蛋蛋 2023年02月14日 29 0

转自:https://blog.csdn.net/xyc1211/article/details/120349794

笔记

关键词 注解 备注
term 字段类查询:不分词 单词匹配
terms 字段类查询:一次传入多个 单词匹配
range 用于date或number类型的字段范围查询 单词匹配
match 匹配查询,用评分机制(TF/IDF)进行打分 全文匹配
match_all 查询所有 全文匹配
multi_match 多字段匹配查询 全文匹配
match_phrase 有顺序要求,查询指定段落 全文匹配
query_string 全文匹配
simple_query_string 全文匹配
bool 布尔查询由一个或多个布尔子句组成 复合查询
must 返回的文档必须满足must子句的条件,并且参与计算分值 复合查询
must_not 返回的文档必须不满足定义的条件 复合查询
filter 返回的文档必须满足filter子句的条件, 不计算分值(推荐) 复合查询
should 如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回 复合查询
minimum_should_match 只包含should时,最少满足n个条件 复合查询
constant_score
dis_max 复合查询
function_score
boosting
_source 查询指定字段
includes _source中,来指定想要显示的字段
excludes _source中,来指定不想要显示的字段
highlight 高亮
from 指定移位
size 指定返回条数 "size": 0, #表示只显示聚合的值,不显示具体数据
aggs 对聚合结果进行过滤
post_filter 可以使聚合不受过滤影响,适用于聚合条件与过滤条件不一致的情况
nested 嵌套查询,查询对象内部类的值

aggs

来自:https://blog.csdn.net/weixin_36303283/article/details/113021310

度量聚合:min、max、sum、avg聚合, 度量聚合接收一个输入文档集并生成至少一个统计值sum。
桶聚合:桶聚合返回很多子集,并限定输入数据到一个特殊的叫做桶的子集中。可以把桶聚合想象成类似前面切面功能的东西。

聚合类型 聚合名称 备注 案例
度量聚合 sum聚合 统计不同日志类型的总数量sum(log_type) "aggs": {"sum_logtype": {"sum": {"field": "log_type"} }}
度量聚合 count聚合 就是count(*) "aggs": {"sum_logtype": {"count": {"field": "log_type"} }}
度量聚合 stats聚合 返回所有度量类型的统计 "stats_year": {"count": 4,"min": 1886,"max": 1961,"avg": 1928,"sum": 7712}
度量聚合 avg均值聚合 {"aggs" : {"avg_grade" : { "avg" : { "field" : "grade" } }}}
桶聚合 term聚合 词条的聚合 "aggs": {"sum_logtype": {"terms": {"field": "log_type"} } }}
桶聚合 range聚合
桶聚合 date range聚合 "aggregations": {"time_range": {"range": {"field": "timestamp","ranges": [{"to": 1487520050000},{"from": 1487520050000,"to": 1487520150000},{"from": 1487520150000}]}}}

全文匹配:针对text类型的字段进行全文检索,会对查询语句先进行分词处理

概念介绍

es中的search主要分为URI Search和 body Search

  • 操作简便,方便通过命令进行测试
  • URI Search 仅包含部分查询语法
  • 搜索条件越来越复杂 url Search会越来越长. 这时候就该用 Body Search了,把搜索条件写在请求体中
  • Body Search 支持完备的 Query DSL 查询语法

查询语法 Query DSL

es提供的一套完整的基于json格式的结构化查询语法
Search APIs

作用:搜索数据,查询语法多,功能强大

_search 为endpoint,主要分为字段类查询和复合查询。

字段类查询:只针对某一个字段进行查询

  • 单词匹配:查询语句不做分词处理,直接去匹配字段的倒排索引,
  1. term 不分词

  2. terms

  3. range 用于date或number类型的字段范围查询

  • 全文匹配:针对text类型的字段进行全文检索,会对查询语句先进行分词处理
  1. match 匹配查询,用评分机制(TF/IDF)进行打分

  2. match_all 查询所有

  3. multi_match 多字段匹配查询

  4. match_phrase 有顺序要求,查询指定段落

  5. query_string

  6. simple_query_string

  • 复合查询:包含一个或多个字段类查询或者复合查询语句
    bool :布尔查询由一个或多个布尔子句组成
  1. must 返回的文档必须满足must子句的条件,并且参与计算分值

  2. must_not 返回的文档必须不满足定义的条件

  3. filter 返回的文档必须满足filter子句的条件, 不计算分值

  4. should 如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回

    • constant_score

    • dis_max

    • function_score

    • boosting

  • 聚合查询
    _cat API

作用:查询Elasticsearch的相关信息。包括集群中的index数量、运行状态、当前集群所在的ip

count api

返回符合条件的文档数

常用query

集群

kibana URI Search 作用
GET / http://IP:9200/ 查看集群信息
GET _cat/health?v http://IP:9200/_cat/health?v 查询集群健康信息
GET _cat/nodes?v http://IP:9200/_cat/nodes?v 查询集群节点信息
GET _cat/allocation?v http://IP:9200/_cat/allocation?v 查询集群数据节点信息

索引

method kibana URI Search 作用
GET GET * http://IP:9200/_cat/indices?v 查看所有索引列表
GET GET {index} http://IP:9200/{索引名称} 查看指定索引 元数据

文档

method kibana 等同 URI Search 作用
GET GET /_search 空搜索, 搜索集群下所有文档
GET GET {index}/_search http://IP:9200/{索引名称}/_search 搜索索引下所有文档
GET GET {index}/{type}/_search 搜索索引/类型下所有文档
GET GET /_all/{type}/_search 搜索所有索引/类型的文档
GET GET {index}/{type}/{id} 索引/类型/id获取唯一文档
GET GET {index}/_search + {json条件} 高级搜索
{
    QUERY_NAME: {
        FIELD_NAME: {
            ARGUMENT: VALUE,
            ARGUMENT: VALUE,...
        }
    }
}

高级搜索

url 作用
GET {index}/_search + {json条件} 高级搜索
GET /索引库名/_search
{
    "query":{
        "查询类型":{
            "查询条件":"查询条件值"
        }
    }
}

match_all 查询所有

GET /_search
{
	"query": {
		"match_all": {}
	}
}

match 匹配查询

GET /_search
{
	"query": {
		"match": {
			"price":4000.00
		}
	}
}

multi_match 多字段匹配查询
在多个字段中查询。

GET /_search
{
	"query": {
		"multi_match": {
			"query": "zhangsan",
			"fields": ["name","nickname"]
		}
	}
}

term 关键字精确查询
关键词匹配查询,不对查询条件进行分词

GET /_search
{
	"query": {
		"term": {
			"name": {
				"value": "zhangsan"
			}
		}
	}
}

terms 多关键字精确查询

{
	"query": {
		"terms": {
			"name": ["zhangsan","lisi"]
		}
	}
}

range 范围查询
2019 > timestamp > 2021

{"query": 
  {"bool": 
    {"must": 
      [ {"range": 
      		{"timestamp": 
      			{"from": "2019-05-09T18:25:01.000+0800"},
      			{"to": "2021-05-09T18:25:01.000+0800"}
      		}
        }
      ]
    }
  }
}

组合查询

  • must(必须 )、must_not(必须不)、should(应该)组合查询

_source 查询指定字段

{
	"_source": ["name","nickname"],
	"query": {
		"terms": {
			"nickname": ["zhangsan"]
		}
	}
}

过滤字段

  • includes / excludes过滤字段
    includes:来指定想要显示的字段
    excludes:来指定不想要显示的字段
{
	"_source": {
		"includes": ["name","nickname"]
	},
	"query": {
		"terms": {
			"nickname": ["zhangsan"]
		}
	}
}

highlight 高亮

{
	"query": {
		"match": {
			"name": "zhangsan"
		}
	},
	"highlight": {
		"pre_tags": "<font color='red'>",
		"post_tags": "</font>",
		"fields": {
			"name": {}
		}
	}
}
  • 排序
  • 分页查询
## 默认返回10条,可用size指定返回条数,通过from指定位移
curl 'localhost:9200/accounts/person/_search'  -d '
{
    "query": {
        "match" : {
            "desc" : "软件"
        }
    },
    "from": 1,
    "size": 1
}'
Last Updated: 2023/02/14 14:46:03
linux基础_[转]tcping命令详解 [转]ES搜索结果字段介绍