前言
Domain Specific Language
领域专用语言
Elasticsearch provides a full Query DSL based on JSON to define queries
- Elasticsearch 提供了基于 JSON 的 DSL 来定义查询。
- DSL 由叶子查询子句和复合查询子句两种子句组成。
- 本文适配 Elasticsearch 7.x 版本
- 推荐学习阮一鸣《Elasticsearch 核心技术与实战》
- Elasticsearch 查询层级图
Query 上下文和 Filter 上下文
叶子查询子句
Leaf query clauses,叶子查询子句
Full text queries,全文查询
全文查询关键字
intervals
match
match_bool_prefix
match_phrase
match_phrase_prefix
multi_match
query_string
simple_query_string
GET /_search
{
"query": {
"match": {
"message": {
"query": "this is a test"
}
}
}
}
term 级查询
term 级查询关键字
exists
fuzzy
ids
prefix
range
regexp
term
terms
terms_set
type
wildcard
GET my_index/_search?pretty
{
"query": {
"term": {
"full_text": "Quick Brown Foxes!"
}
}
}
GET _search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 20,
"boost": 2
}
}
}
}
Compound query clauses,复合查询子句
- 布尔查询的子句类型有四种: must、filter、should、must_not
must
算分
返回的文档必须满足 must 子句的条件
多个查询条件的完全匹配,相当于 AND
filter
不算分的 must
should
算分
在一个 bool 查询中,如果没有 must 或者 filter,
有一个或者多个should子句,那么只要满足一个就可以返回。
minimum_should_match 参数定义了至少满足几个子句
至少有一个查询条件匹配,相当于 OR
must_not
不算分
返回的文档必须不满足 must_not 定义的条件
多个查询条件的相反匹配,相当于 NOT
POST _search
{
"query": {
"bool" : {
"must" : {
"term" : { "user" : "kimchy" }
},
"filter": {
"term" : { "tag" : "tech" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
},
"should" : [
{ "term" : { "tag" : "wow" } },
{ "term" : { "tag" : "elasticsearch" } }
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
GET /_search
{
"query": {
"boosting": {
"positive": {
"term": {
"text": "apple"
}
},
"negative": {
"term": {
"text": "pie tart fruit crumble tree"
}
},
"negative_boost": 0.5
}
}
}
GET /_search
{
"query": {
"constant_score": {
"filter": {
"term": {
"user": "kimchy"
}
},
"boost": 1.2
}
}
}
GET /_search
{
"query": {
"dis_max": {
"queries": [
{
"term": {
"title": "Quick pets"
}
},
{
"term": {
"body": "Quick pets"
}
}
],
"tie_breaker": 0.7
}
}
}
GET /_search
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"boost": "5",
"random_score": {},
"boost_mode": "multiply"
}
}
}
本文出自 qbit snap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。