转自: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

1. URI Search
- 操作简便,方便通过命令进行测试
- URI Search 仅包含部分查询语法

2. Body Search
- 搜索条件越来越复杂 url Search会越来越长. 这时候就该用 Body Search了,把搜索条件写在请求体中
- Body Search 支持完备的 Query DSL 查询语法

查询语法 Query DSL
es提供的一套完整的基于json格式的结构化查询语法
Search APIs
作用:搜索数据,查询语法多,功能强大
以 _search 为endpoint,主要分为字段类查询和复合查询。
字段类查询:只针对某一个字段进行查询
- 单词匹配:查询语句不做分词处理,直接去匹配字段的倒排索引,
-
term 不分词
-
terms

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

- 全文匹配:针对text类型的字段进行全文检索,会对查询语句先进行分词处理
-
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子句,那么只要满足一个就可以返回

-
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
}'
