精确查询
存在查询
Exists query 用于查询某个字段不为空的数据。如下所示,查询 age 不为空的 数据
POST user/_search
{
"query": {
"exists": {
"field": "age"
}
}
}
主键查询
通过 _id 字段查询数据
POST user/_search
{
"query": {
"ids": {
"values": ["1", "2", "3"]
}
}
}
前缀查询
POST user/_search
{
"query": {
"prefix": {
"address": {
"values": "beijing"
}
}
}
}
范围查询
POST user/_search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
}
}
查询参数 | 解释 |
---|---|
gt | > |
gte | >= |
lt | < |
lte | <= |
format | 设置时间格式 |
正则查询
POST user/_search
{
"query": {
"regexp": {
"name": "*小*"
}
}
}
术语查询
POST user/_search
{
"query": {
"term": {
"name": "小明"
}
}
}
多术语查询
terms query 和 term query 基本一样,terms query 允许在参数中传递多个查询词
POST user/_search
{
"query": {
"terms": {
"name": ["小明", "小红"]
}
}
}
通配符查询
POST user/_search
{
"query": {
"wildcard": {
"name": "*小*"
}
}
}
支持如下两个通配符
- ?匹配单个字符
- * 匹配零个或多个字符,包括空字符
Compound queries(复合查询)
布尔查询
类型 | 说明 |
---|---|
must | 必须匹配,需要计算相关度得分,类似于逻辑上的 AND 操作 |
filter | 必须匹配但不影响评分,类似于 must 但更轻量 |
should | 至少有一个条件匹配,类似于逻辑上的 OR 操作,可以用 minimum_should_match 指定至少匹配的条件数量 |
must_not | 条件不能匹配,类似于逻辑上的 NOT 操作 |
Match all query(查询全部)
GET user/_search
{
"query": {
"match_all": {}
}
}
分页
普通分页
GET user/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 20
}
from:指定从哪开始
size:指定要返回的结果数量
当 from + size 的值超过10000 的时候会报错,如果一定要使用这种方式,可以在索引配置中调大 index.max_result_window 的值。当数量超过 10000 的时候推荐使用 search after 这种方式
滚动分页
search after 分页
排序
可选值 | 解释 |
---|---|
asc | 升序 |
desc | 降序 |
GET user/_search
{
"query": {
"match_all": {}
},
"sort": [
{ "age": "desc" },
{ "email": "asc" }
]
}
参考博客
官方文档分页或排序
[1]https://www.elastic.co/guide/en/elasticsearch/reference/8.11/sort-search-results.html