ES高级查询Query DSL
ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language领域专用语言) , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。在实战过程中,需要避免将term检索应用于text类型的检索。精确匹配是指的是搜索内容不经过文
ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language领域专用语言) , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。
官方文档
Query DSL | Elasticsearch Guide [8.17] | Elastic
示例数据准备
put employee
{
"settings":{
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings":{
"properties": {
"name":{
"type": "keyword"
},
"sex":{
"type": "integer"
},
"age":{
"type": "integer"
},
"address":{
"type": "text",
"analyzer": "standard",
"fields": {
"keyword":{
"type":"keyword"
}
}
},
"remark":{
"type": "text",
"analyzer": "standard",
"fields": {
"keyword":{
"type":"keyword"
}
}
}
}
}
}
POST /employee/_bulk
{"index":{"_index":"employee","_id":1}}
{
"name":"张三",
"sex":1,
"age":25,
"address":"广州天河公园",
"remark":"java developer"
}
{"index":{"_index":"employee","_id":2}}
{
"name":"李四",
"sex":1,
"age":34,
"address":"在私企负责研发,工作能力还算挺强的",
"remark":"cailiao"
}
{"index":{"_index":"employee","_id":3}}
{
"name":"Jasmine",
"sex":1,
"age":23,
"address":"在长沙体制内工作",
"remark":"在长沙体制内工作"
}
{"index":{"_index":"employee","_id":4}}
{
"name":"鑫",
"sex":1,
"age":30,
"address":"北京",
"remark":"运维工程师"
}
{"index":{"_index":"employee","_id":5}}
{
"name":"鑫",
"sex":1,
"age":34,
"address":"四川德阳人,工作生活在深圳",
"remark":"律师"
}
{"index":{"_index":"employee","_id":6}}
{
"name":"Yixuan",
"sex":1,
"age":29,
"address":"湖南常德人",
"remark":"公办专科院校担任教师"
}
match_all ——匹配所有文档
match_all查询是一个特殊的查询类型,它用于匹配索引中的所有文档,而不考虑任何特定的查询条件。
GET /employee/_search
{
"query":{
"match_all": {}
},
"size": 10
}
高级用法
例如,如果您想要返回索引中的前10个文档,并且按照文档的评分进行排序,您可以使用以下查询:
GET /employee/_search
{
"query":{
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 2,
"size": 5
}
_source的用法
不查看源数据,仅查看元字段
GET /employee/_search
{
"query":{
"match_all": {}
},
"_source": [
"name","address"
],
"from": 2,
"size": 5
}
size返回指定条数
from&size分页查询
sort指定字段排序
根据age排序
排序的同时进行分页
GET /employee/_search
{
"query":{
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 2,
"size": 5
}
精确匹配
精确匹配是指的是搜索内容不经过文本分析直接用于文本匹配,这个过程类似于数据库的SQL查询,搜索的对象大多是索引的非text类型字段。此类检索主要应用于结构化数据,如ID、状态和标签等。
term——单字段精确匹配查询
term检索主要应用于单字段精准匹配的场景。在实战过程中,需要避免将term检索应用于text类型的检索。进一步说,term检索针对的是非text类型,用于text类型时并不会报错,但检索结果一般会达不到预期。
基本语法
在Elasticsearch 8.x中,term查询用于执行精确匹配查询,它适用于未经过分词处理的keyword字段类型。term查询的基本语法如下:
更多推荐
所有评论(0)