query_string 是一种强大的查询语法,支持 Lucene 查询语法,适用于复杂查询场景。
2.1 基本语法
GET /my_index/_search
{
"query": {
"query_string": {
"query": "field_name:search_value"
}
}
}
2.2 常用操作符
| 操作符 | 说明 | 示例 |
|---|---|---|
: | 匹配值 | name:John |
AND / OR | 逻辑与 / 逻辑或 | name:John AND age:30 |
NOT | 逻辑非 | NOT name:John |
* | 通配符(匹配任意字符) | name:J*(匹配以 J 开头的 name) |
? | 通配符(匹配单个字符) | name:Jo?n(匹配 John、Joan 等) |
~ | 模糊查询(支持编辑距离) | name:John~1(匹配 John、Jonn 等) |
[TO] | 范围查询 | age:[20 TO 30] |
+ | 必须包含 | +name:John +age:30 |
- | 必须不包含 | -name:John |
() | 分组查询 | (name:John OR name:Jane) AND age:30 |
_exists | null或字段不存在判断 | NOT _exists:name |
2.3 示例
-
简单查询:
GET /my_index/_search { "query": { "query_string": { "query": "name:John" } } } -
多字段查询:
GET /my_index/_search { "query": { "query_string": { "query": "name:John OR age:30" } } } -
模糊查询:
GET /my_index/_search { "query": { "query_string": { "query": "name:Jhno~1" } } } -
范围查询:
GET /my_index/_search { "query": { "query_string": { "query": "age:[20 TO 30]" } } } -
分组查询:
GET /my_index/_search { "query": { "query_string": { "query": "(name:John OR name:Jane) AND age:30" } } }