ES查询字符串query_string的使用(2021-05-27)

本文详细介绍了Elasticsearch的query_string查询,包括OR、AND条件查询,多字段组合查询,指定字段查询,不等值查询,字段及查询条件通配符,存在和不存在查询。query_string查询提供了一种灵活的语法,类似于SQL,使得构建复杂的查询变得更加简单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 前言

查询字符串有一点写SQL的影子了,相对来说查询比较方便。查询分为三层嵌套结构,首先最外层的query,表示查询上下文,query_string地位跟match、term相同,表示查询类型,内层的query表示查询条件。
通过query_string组合查询条件要比使用纯json嵌套结构方便太多太多了。本文主要讲述如何使用query_string的语法完全替代纯json的语法。

1.OR条件查询

下面使用的是or条件进行查询,即地区要么是山东省东营市要么是宁夏回族自治区吴忠市,但是必须要注意的是OR和后面要讲的and都必须要大写

{
   
   
    "track_total_hits":true,
    "query":{
   
   
        "query_string":{
   
   
            "default_field":"device.地区",
            "query":"东营市 OR 吴忠市"
        }
    }
}

2. AND条件查询

and条件插件就是条件连接词为and

{
   
   
"track_total_hits":true,
    "query":{
   
   
        "query_string":{
   
   
            "default_field":"device.地区",
            "query":"吴忠市 AND 忠市"
        }
    }
}

3. 多字段组合查询

如果查询字段是多个,那么字段需要写fields,而不是default_field,并且是一个数组结构。 可能比较疑惑,那query条件咋写呢。这个无所谓,比如我们要查<device.地区>字段为99000844071815和<device.deviceId>字段为宁夏回族自治区吴忠市,只需要将两个条件拼接到qu

<think>好的,用户想了解关于Elasticsearch中`es simple_query_string`的使用示例。首先,我需要确认用户的需求是什么。他们可能是在使用Elasticsearch时遇到了查询构造的问题,或者想了解如何更灵活地进行搜索。`simple_query_string`查询相对于`query_string`来说更简单,适合用户输入,因为它会忽略无效的语法,并且默认使用OR操作符。 接下来,我需要回忆`simple_query_string`的主要特性和用法。它支持常用的操作符,如`+`表示必须,`|`表示OR,`-`表示NOT,还支持分组和通配符。不过,它不像`query_string`那样支持所有Lucene语法,所以需要明确说明它的限制。 然后,我应该考虑如何组织示例。用户可能需要基础的查询示例,包括不同操作符的使用,以及字段限定、默认操作符的设置等高级用法。此外,多字段搜索和模糊匹配也是常见的用例,应该包含进去。 还要注意语法正确性,确保每个示例中的JSON结构正确,特别是转义字符的处理,比如在字符串使用引号需要转义。同时,需要解释每个参数的作用,比如`query`、`fields`、`default_operator`等,帮助用户理解如何调整查询。 用户可能的疑问点包括操作符的具体作用、字段加权的意义、模糊查询的参数设置,以及默认操作符的影响。因此,在解释每个示例时,需要简明扼要地说明这些参数的效果,比如`^3`表示提升字段的权重,`~2`表示允许两个编辑距离的模糊匹配。 最后,总结`simple_query_string`的优势和适用场景,强调其用户友好性和容错性,适合直接处理用户输入的搜索条件。同时提醒用户注意它与`query_string`的区别,避免误用。 检查是否有遗漏的重要特性,比如对特殊字符的处理、性能方面的考虑,或者是否支持短语查询。确认所有示例都能正确运行,并且语法符合Elasticsearch的版本要求。确保使用中文清晰解释,结构层次分明,方便用户逐步理解和应用。</think>以下是对 Elasticsearch 中 `simple_query_string` 查询的详细介绍及使用示例: --- ### 一、`simple_query_string` 是什么? - 一种更简单、容错性更强的查询语法,适合直接处理用户输入的搜索条件 - 支持常用操作符:`+`(必须包含)、`|`(或)、`-`(排除)、`*`(通配符)等 - **特点**:自动忽略无效语法,默认使用 `OR` 操作符 --- ### 二、基础使用示例 #### 示例1:简单搜索 ```json GET /products/_search { "query": { "simple_query_string": { "query": "apple +phone -samsung", "fields": ["name", "description"] } } } ``` - **含义**:搜索包含 `apple` 且包含 `phone`,但不含 `samsung` 的文档 - **字段限定**:只在 `name` 和 `description` 字段中搜索 --- #### 示例2:逻辑操作符 ```json { "query": { "simple_query_string": { "query": "(laptop | notebook) +16GB", "default_operator": "AND" } } } ``` - **含义**:搜索同时包含 `16GB` 和 (`laptop` 或 `notebook`) 的文档 - `default_operator`:指定默认逻辑关系为 AND --- ### 三、高级用法 #### 示例3:字段加权 ```json { "query": { "simple_query_string": { "query": "error~2", "fields": ["title^3", "content"] } } } ``` - **含义**: - `title^3`:`title` 字段权重是 `content` 字段的 3 倍 - `error~2`:支持模糊匹配(允许 2 个字符的编辑距离) --- #### 示例4:短语搜索 ```json { "query": { "simple_query_string": { "query": "\"wireless charger\"", "quote_field_suffix": ".exact" } } } ``` - **含义**:精确匹配短语 `wireless charger` - `quote_field_suffix`:指定使用 `.exact` 后缀字段进行精确匹配 --- ### 四、参数说明 | 参数 | 说明 | |---------------------|----------------------------------------------------------------------| | `query` | 查询字符串,支持特殊符号(自动忽略无效语法) | | `fields` | 指定搜索字段,支持通配符(如 `*_name`)和加权(如 `title^2`) | | `default_operator` | 默认逻辑操作符(`OR` 或 `AND`),默认为 `OR` | | `analyzer` | 指定分词器 | | `flags` | 启用特定语法功能(如 `PHRASE`、`FUZZY` 等) | --- ### 五、适用场景 1. 用户直接输入的搜索框查询 2. 需要自动容错的简单搜索 3. 快速实现多字段组合查询 注意:与 `query_string` 查询相比,`simple_query_string` **不支持**正则表达式、邻近搜索等高级功能,但安全性更高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值