elasticsearch查询语法

我们可以使用两种结构化语句: 结构化查询(Query DSL)和结构化过滤(Filter DSL)。 查询与过滤语句非常相似,但是它们由于使用目的不同而稍有差异。
一条过滤语句会询问每个文档的字段值是否包含着特定值,一条查询语句会计算每个文档与查询语句的相关性,会给出一个相关性评分 _score,并且 按照相关性对匹配到的文档进行排序。

1 TERM 过滤
精确匹配数字、日期、布尔值或 not_analyzed 的字符串。相当于等号 =。

{ “term”: { “age”: 26 }}
{ “term”: { “date”: “2014-09-01” }}
{ “term”: { “public”: true }}
{ “term”: { “tag”: “full_text” }}

2 TERMS 过滤
精确匹配多个值。相当于 in。

{
“terms”: {
“tag”: [ “search”, “full_text”, “nosql” ]
}
}

3 RANGE 过滤
按照指定范围查找一批数据,相当于 between:

{
“range”: {
“age”: {
“gte”: 20,
“lt”: 30
}
}
}
字段 含义
gt >
gte >=
lt <
lte <=

4 EXISTS 和 MISSING 过滤
针对已经查出一批数据,但是想区分是否存在某个字段。类似于 IS_NULL 条件。

{
“exists”: {
“field”: “title”
}
}

5 BOOL 过滤
bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑:

过滤子句 含义
must 多个查询条件完全匹配,相当于 and。
must_not 多个查询条件的相反匹配,相当于 not。
should 至少有一个查询条件匹配,相当于 or。
复合实例:

{
“bool”: {
“must”: { “term”: { “folder”: “inbox” }},
“must_not”: { “term”: { “tag”: “spam” }},
“should”: [
{ “term”: { “starred”: true }},
{ “term”: { “unread”: true }}
]
}
}

6 MATCH_ALL 查询
使用 match_all 可以查询到所有文档,事没有查询条件下的默认语句。

{
“query”: {
“match_all”: {}
}
}
此查询常用于合并过滤条件。比如说你需要检索所有的邮箱,所有的文档相关性都是相同的,所以得到的 _score 为 1。

7 MATCH 查询
某个字段中包含特定内容

{
“query”: {
“match”: {
“字段名”: “特定内容”
}
}
}
如果用 match 指定了一个确切值,在遇到数字,日期,布尔值或者 not_analyzed 的字符串时,它将为你搜索你给定的值:

{ “match”: { “age”: 26 }}
{ “match”: { “date”: “2014-09-01” }}
{ “match”: { “public”: true }}
{ “match”: { “tag”: “full_text” }}

8 MULTI_MATCH 查询
multi_match 查询允许你在 match 查询的基础上同时搜索多个字段:

{
“multi_match”: {
“query”: “full text search”,
“fields”: [ “title”, “body” ]
}
}

9 BOOL 查询
bool 查询与 bool 过滤相似,用于合并多个查询子句。不同的是,bool 过滤可以直接给出是否匹配成功,而 bool 查询要计算每一个查询子句的 _score (相关性分值)。

查询子句 含义
must 查询指定文档一定要被包含。
must_not 查询指定文档一定不要被包含。
should 查询指定文档,有则可以为文档相关性加分。
如果 bool 查询下没有 must 子句,那至少应该有一个 should 子句。但是 如果有 must 子句,那么没有 should 子句也可以进行查询。

10 查询与过滤条件的合并
search API 中只能包含 query 语句,所以我们需要用 filtered 来同时包含 query 和 filter 子句,外面再包含一层 query:

{
“query”: {
“filtered”: {
“query”: { “match”: { “email”: “business opportunity” }},
“filter”: { “term”: { “folder”: “inbox” }}
}
}
}

参考:
https://note4code.com/2016/06/17/elasticsearch-query-dsl/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值