Elasticsearch专栏-4.es基本用法-查询api

es基本用法-查询api

说明

es对数据的检索,总结下来就是两部分,即查询和处理。查询指的是查找符合条件的数据,包括查询所有、匹配查询、布尔查询、范围查询、模糊查询等等。处理指的是对查询到的数据做进一步处理,包括是否分页、是否排序、是否聚合、是否分组、是否只返回部分字段等等。es的api就是对这两部分的不同组合。举例如下,数据集使用上一篇创建的bank索引。

查询所有

c 复制代码
GET /bank/_search
{
  "query":{
    "match_all": {}
  }
}

某一字段匹配查询

这块的查询已经涉及到了分词,指的是查询address中包含Place或National的文档。针对分词查询后面会进一步做深入讲解。

c 复制代码
GET /bank/_search
{
	"query": {
		"match": {
			"address": "Place National"
		}
	}
}

多字段查询

multi_match用在多字段查询中,下面的语句表示,只要address或city中,包含mill和urie其中的一个,就算是命中查询。用sql语句表示: select * from bank where (address like '%mill%' or like '%urie%') or (citylike '%mill%' or like '%urie%')

c 复制代码
GET /bank/_search
{
  "query":{
    "multi_match": {
      "query": "mill urie",
      "fields": ["address","city"]
    }
  }
}

bool查询

bool查询主要用到三个关键字:must、must_not、should。在mysql中,就是and、not、or的概念。

其中,must表示必须包含,must_not表示一定不能包含,should表示可以包含,也可以不包含。包含的话,排名要比不包含的靠前。

c 复制代码
GET /bank/_search
{
	"query": {
		"bool": {
			"must": [
				{
					"match": {
						"gender": "M"
					}
				},
				{
					"match": {
						"address": "mill"
					}
				}
			],
			"must_not": [
				{
					"match": {
						"age": "18"
					}
				}
			],
			"should": [
				{
					"match": {
						"lastname": "Wallace"
					}
				}
			]
		}
	}
}

范围查询

在范围查询中,使用的关键词有range、filter,以及表示大于小于的gt、lt、gte、lte。

关键字 含义
gt 大于
lt 小于
gte 大于等于
lte 小于等于
  1. rang方式
c 复制代码
GET /bank/_search
{
	"query": {
	  "range": {
		"age": {
		  "gte": "20",
		  "lte": "25"
		  }
	  }
	}
}
  1. filter方式
c 复制代码
GET /bank/_search
{
	"query": {
		"bool": {
			"must": [
				{
					"match": {
						"gender": "M"
					}
				},
				{
					"match": {
						"address": "mill"
					}
				}
			],
			"filter": [
				{
					"range": {
						"age": {
							"gte": 10,
							"lte": 50
						}
					}
				},
				{
					"range": {
						"balance": {
							"gte": 9812,
							"lte": 9813
						}
					}
				}
			]
		}
	}
}

精确查询

精确查询可以简单理解为完全匹配查询,用term关键字。在数值型查询中经常用到,而在文本中查询使用,是表示查询时不进行分词,刚好和分词查询关键字match对立。

1.查询单个

c 复制代码
GET /bank/_search
{
	"query": {
		"match": {
			"age": 33
		}
	}
}

2.查询多个,此时用terms

c 复制代码
GET /bank/_search
{
	"query": {
		"terms": {
		  "balance": [
		    "34487",
		    "29104"
		  ]
		}
	}
}

2.查询多个,也可以用另外一种方式:should+term

c 复制代码
GET /bank/_search
{
	"query": {
	  "bool": {
	    "should": [
	      {
	        "term": {
	          "balance": "34487"
	        }
	      },
	      {
	        "term": {
	          "balance": "29104"
	        }
	      }
	    ]
	  }
	}
}

正则匹配

c 复制代码
GET /bank/_search
{
  "query": {
    "wildcard": {
        "firstname": "*amber"
    }
  }
}

模糊查询

c 复制代码
GET /bank/_search
{
  "query": {
    "fuzzy": {
        "firstname": "hol"
    }
  }
}

上述只罗列了常用的查询,除此之外,还有很多其他查询,这里不做演示,感兴趣的小伙伴可以自己查找下。

结果处理

开头我们也说了,es对数据的处理就两部分,查询和处理。上面介绍了查询,现在我们介绍下基本的处理:分页、排序、返回部分字段。

关键字 含义
sort desc/asc
from 页数,从0开始
size 每页大小
_source 只返回需要的字段,可以罗列字段,也可以用通配符
c 复制代码
GET /bank/_search
{
	"query": {
		"match": {
			"address": "Hendrickson"
		}
	},
	"sort": [
		{
			"balance": "desc"
		}
	],
	"from": 0,
	"size": 5,
	"_source": [
		"balance",
		"account_number",
		"address"
	]
}
c 复制代码
GET /bank/_search
{
	"query": {
		"match": {
			"address": "Hendrickson"
		}
	},
	"sort": [
		{
			"balance": "asc"
		}
	],
	"from": 0,
	"size": 5,
	"_source":{
     "includes": "addr*",
     "excludes": ["name","bir*"]
  }
}
相关推荐
本旺3 小时前
Elasticsearch 前缀匹配性能优化实战,附4种方式即执行计划判别
大数据·elasticsearch·性能优化
Elastic 中国社区官方博客8 小时前
Elastic 在 Everest Group 企业搜索产品 PEAK Matrix® 评估 2026 中被评为领导者
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
Java小白笔记9 小时前
Codex Skills 分类整理
大数据·人工智能·elasticsearch·搜索引擎·ai·ai编程·ai写作
Elastic 中国社区官方博客12 小时前
谁来评判评判者?在 Elasticsearch Workflows 中使用 LLM-as-a-Judge
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
Elastic 中国社区官方博客16 小时前
使用 Elasticsearch 作为 Grafana 的直接替代 Prometheus 后端
大数据·数据库·sql·elasticsearch·搜索引擎·grafana·prometheus
阿里云大数据AI技术1 天前
AI Search × ES Agent Builder 最佳实践:企业智能助手落地指南
人工智能·elasticsearch
利威尔·3 天前
常用git命令
大数据·elasticsearch·搜索引擎
至乐活着3 天前
ELK日志系统从零搭建到实战:Nginx日志采集与可视化全攻略
nginx·elk·elasticsearch·docker·日志系统
say_fall3 天前
【Git 精品详解】企业规范:企业级开发模型、Git Flow、发版流程规范、Code Owner 制度、事故应急回滚
大数据·linux·服务器·git·学习·elasticsearch
Elastic 中国社区官方博客4 天前
跟踪资金流向:使用 ES|QL 和跨集群搜索追踪洗钱网络
大数据·人工智能·安全·elasticsearch·搜索引擎·金融·全文检索