ElasticSearch-query-filtered-bool组合过滤查询
2025-01-22 08:19:30    427 字   
This post is also available in English and alternative languages.

ElasticSearch版本:6.5.0(点击跳转官方文档)

ElasticSearch 组合过滤查询


1. filter 过滤查询

elasticsearch 5.x中,filtered(filteredQuery)已经删除了,由 bool 查询代替。


2. bool 组合/过滤查询

bool子句允许你合并其他的合法子句,无论是 must,must_not还是should

bool可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:

操作符含义
must文档必须匹配,相当于 and
must_not文档必须不匹配, 相当于 not
should文档至少有一个条件匹配, 相当于 or

在 books 索引,book类型下,查询两个子语句:

1.name字段必须包含’普通’

2.name字段必须不包含’教师’

1
2
3
4
5
6
7
8
9
GET /books/book/_search
{
"query": {
"bool": {
"must": [{"match": {"name": "普通"}}],
"must_not": [{"match": {"name": "教师"}}]
}
}
}

在 books 索引,book类型下,查询三个子句:

  • name字段必须包含’普通’
  • name字段必须包含’高等’
  • info字段必须不包含’原理’
1
2
3
4
5
6
7
8
9
10
11
12
13
14
GET /books/book/_search
{
"query": {
"bool": {
"must": [
{"match": {"name": "普通"}},
{"match": {"name": "高等"}}
],
"must_not": [
{"match": {"info": "原理"}}
]
}
}
}

在 books 索引,book类型下,符合 name包含’音乐史’、price为99,其中一个条件,就算命中。

1
2
3
4
5
6
7
8
9
10
11
GET /books/book/_search
{
"query": {
"bool": {
"should": [
{"match": {"name": "音乐史"}},
{"match": {"price": "99"}}
]
}
}
}

3. Reference