📅  最后修改于: 2023-12-03 14:50:54.763000             🧑  作者: Mango
Elasticsearch 是一个开源的分布式全文检索引擎,提供了强大的搜索和分析功能。其中,查询语句是 Elasticsearch 中最基础和核心的部分。本文将介绍如何在 Elasticsearch 中使用 WHERE 子句(类似 SQL 中的 WHERE)进行查询过滤。
在 Elasticsearch 中,查询语句使用 JSON 格式进行描述。WHERE 子句的基本语法如下:
{
"query": {
"bool": {
"must": [
// 其他查询条件
],
"filter": [
// WHERE 子句的过滤条件
]
}
}
}
其中,filter
段是我们添加 WHERE 子句的部分,可以包含多个过滤条件。
Elasticsearch 提供了多种过滤条件,这里只列举一些常用的:
过滤字段的值等于某个具体值。
{
"query": {
"bool": {
"filter": {
"term": {
"field_name": "field_value"
}
}
}
}
}
过滤字段的值在某个区间范围内。
{
"query": {
"bool": {
"filter": {
"range": {
"field_name": {
"gte": "lower_bound",
"lte": "upper_bound"
}
}
}
}
}
}
过滤字段存在,不为 NULL 或空字符串。
{
"query": {
"bool": {
"filter": {
"exists": {
"field": "field_name"
}
}
}
}
}
多个过滤条件可以通过逻辑运算符组合。
{
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"term": {
"field1": "value1"
}
},
{
"range": {
"field2": {
"gte": "lower_bound",
"lte": "upper_bound"
}
}
}
]
}
}
}
}
}
{
"query": {
"bool": {
"filter": {
"bool": {
"should": [
{
"term": {
"field1": "value1"
}
},
{
"range": {
"field2": {
"gte": "lower_bound",
"lte": "upper_bound"
}
}
}
]
}
}
}
}
}
{
"query": {
"bool": {
"filter": {
"bool": {
"must_not": {
"term": {
"field1": "value1"
}
}
}
}
}
}
}
下面是一个完整的示例,使用了多个 WHERE 子句组合进行过滤。请将其中的 index_name
和 field_name
替换为你的索引名和字段名。
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": [
{
"term": {
"field1": "value1"
}
},
{
"range": {
"field2": {
"gte": "lower_bound",
"lte": "upper_bound"
}
}
},
{
"exists": {
"field": "field3"
}
},
{
"bool": {
"should": [
{
"term": {
"field4": "value2"
}
},
{
"term": {
"field5": "value3"
}
}
]
}
},
{
"bool": {
"must_not": {
"range": {
"field6": {
"gte": "lower_bound",
"lte": "upper_bound"
}
}
}
}
}
]
}
}
}
这个示例中,“筛选 field1 等于 value1 并且 field2 在区间 [lower_bound, upper_bound] 之间并且 field3 存在并且 field4 等于 value2 或 field5 等于 value3 并且 field6 不在区间 [lower_bound, upper_bound] 之间”的文档。