ES学习摘要 - 12. Query DSL

ES提供了一套基于JSON的查询语言,主要包含两种语句:

叶子查询语句 - 具体条件的查询

组合查询语句 - 用来组合不同查询

12.1 Query and filter context

query语句可以存在于两种场景中:

Query Context - query参数中,出了决定doc是否命中外还会影响doc计算出的_score

Filter Context - filter参数中,只影响是否命中不影响_score计算

12.2 Match All & Match None Query

Match All:

GET /_search { "query": { "match_all": {} } }

Match None:

GET /_search { "query": { "match_none": {} } }

12.3 Full text queries

Match

接受text/numerics/dates,对输入做分词并查询。

GET /_search { "query": { "match" : { "message" : "this is a test" } } }

相比于query_string,match不存在query解析阶段,不支持指定field,wildcards和其他高级语法。不大会失败。

Match Phrase

对输入不分词,作为一个完整短语查询。

GET /_search { "query": { "match_phrase" : { "message" : "this is a test" } } }

Match Phrase Prefix

不分词,作为一个短语,支持以输入为前缀

GET /_search { "query": { "match_phrase_prefix" : { "message" : "quick brown f" } } }

Multi Match

多个field上进行查询

GET /_search { "query": { "multi_match" : { "query": "this is a test", "fields": [ "subject", "message" ] } } }

Query String

对输入做query语法解析,支持复杂的查询语法

GET /_search { "query": { "query_string" : { "default_field" : "content", "query" : "(new york city) OR (big apple)" } } }

Simple Query String

对输入做query语法解析,支持复杂的查询语法,simple_query_string不会抛出任何异常,只忽略非法部分。

12.4 Term Level Queries

Term level查询主要作用于数字、日期、枚举类型的fields上,而不是full texts类型的fields。他们不会对query string做分析,而是直接作用在文档的terms上。

Term/Terms

必须完全匹配指定的terms:

POST _search { "query": { "term" : { "user" : "Kimchy" } } }

指定多个terms:

GET /_search { "query": { "terms" : { "user" : ["kimchy", "elasticsearch"]} } }

Range

对于string/number/date类型的值进行范围查询:

GET _search { "query": { "range" : { "age" : { "gte" : 10, "lte" : 20, "boost" : 2.0 } } } }

range查询支持的参数:

gte >=; gt >; lte <=;lt <;

Exists

返回指定field非空的文档

GET /_search { "query": { "exists" : { "field" : "user" } } }

Prefix

field以特定字串开头的文档

GET /_search { "query": { "prefix" : { "user" : "ki" } } }

Wildcard/Regexp

*匹配任意多个字符,?匹配单个字符

GET /_search { "query": { "wildcard" : { "user" : "ki*y" } } }

正则表达式:

GET /_search { "query": { "regexp":{ "name.first": "s.*y" } } }

12.5 Compound Queries

Bool

组合其他查询

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

must - 必须匹配,参与score计算

filter - 必须匹配,不参与score计算

must_not - 必须不匹配

should -

转载于:https://my.oschina.net/zhuhui/blog/3079964

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值