ES里面常用的查询语句有哪些?
【编程电子书大全】链接: https://pan.baidu.com/s/1yhPJ9LmS_z5TdgIgxs9NvQ?pwd=yyds > 提取码: yyds
Elasticsearch(ES)中常用的查询语句包括以下几类:
1. Match 查询
用于全文搜索,匹配指定字段中的文本。
GET /index_name/_search
{
"query": {
"match": {
"field": "value"
}
}
}
2. Term 查询
用于精确匹配,不会进行分词。
GET /index_name/_search
{
"query": {
"term": {
"field": "value"
}
}
}
3. Range 查询
用于范围查询,如日期、数字范围。
GET /index_name/_search
{
"query": {
"range": {
"field": {
"gte": "value1",
"lte": "value2"
}
}
}
}
4. Bool 查询
用于组合多个查询条件,可以包含 must
、should
、must_not
、filter
子句。
GET /index_name/_search
{
"query": {
"bool": {
"must": [
{ "match": { "field1": "value1" } }
],
"filter": [
{ "term": { "field2": "value2" } }
],
"must_not": [
{ "term": { "field3": "value3" } }
],
"should": [
{ "match": { "field4": "value4" } }
]
}
}
}
5. Match Phrase 查询
用于短语匹配,要求完全匹配短语中的词序。
GET /index_name/_search
{
"query": {
"match_phrase": {
"field": "exact phrase"
}
}
}
6. Multi-Match 查询
在多个字段上进行匹配。
GET /index_name/_search
{
"query": {
"multi_match": {
"query": "value",
"fields": ["field1", "field2"]
}
}
}
7. Wildcard 查询
用于通配符查询,支持 *
和 ?
通配符。
GET /index_name/_search
{
"query": {
"wildcard": {
"field": "val*"
}
}
}
8. Exists 查询
用于检查文档中是否存在某个字段。
GET /index_name/_search
{
"query": {
"exists": {
"field": "field_name"
}
}
}
9. Aggregation 查询
用于统计和聚合分析。
GET /index_name/_search
{
"aggs": {
"aggregation_name": {
"terms": {
"field": "field_name"
}
}
}
}
这些查询语句涵盖了大多数常见的 Elasticsearch 查询需求,根据具体应用场景可以组合使用以实现复杂的查询逻辑。
其中Bool的四种子句的含义如下
在 Elasticsearch 中,bool
查询用于将多个查询子句组合在一起。它包含四种不同的子句,每种子句的作用和使用场景不同:
1. must
- 作用:必须匹配的条件,类似于逻辑上的 AND。
- 特性:文档必须满足
must
子句中的所有条件才能被返回。 - 示例:
"must": [ { "match": { "field1": "value1" } }, { "term": { "field2": "value2" } } ]
2. should
- 作用:可选匹配的条件,类似于逻辑上的 OR。
- 特性:如果有一个或多个
should
子句,则文档满足其中任意一个条件即可被返回。如果没有must
子句,至少一个should
条件必须匹配才能返回文档。 - 示例:
"should": [ { "match": { "field3": "value3" } }, { "term": { "field4": "value4" } } ]
3. must_not
- 作用:必须不匹配的条件,类似于逻辑上的 NOT。
- 特性:文档不能满足
must_not
子句中的任何一个条件,否则不会被返回。 - 示例:
"must_not": [ { "match": { "field5": "value5" } }, { "term": { "field6": "value6" } } ]
4. filter
- 作用:过滤条件,不影响评分。
- 特性:文档必须满足
filter
子句中的所有条件,但这些条件不会影响文档的相关性评分,因此性能较高。 - 示例:
"filter": [ { "term": { "field7": "value7" } }, { "range": { "field8": { "gte": 10, "lte": 20 } } } ]
综合示例
GET /index_name/_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" } }
],
"should": [
{ "match": { "tags": "search" } },
{ "match": { "tags": "analytics" } }
],
"must_not": [
{ "term": { "status": "deprecated" } }
],
"filter": [
{ "term": { "author": "john_doe" } },
{ "range": { "publish_date": { "gte": "2020-01-01" } } }
]
}
}
}
在这个例子中,查询的意思是:
- 文档必须包含
title
字段匹配 “Elasticsearch”。 - 文档可以包含
tags
字段匹配 “search” 或 “analytics”。 - 文档不能包含
status
字段为 “deprecated”。 - 文档必须包含
author
字段为 “john_doe” 且publish_date
字段在 2020-01-01 之后。
通过这种方式,可以灵活组合不同的条件来构建复杂的查询逻辑。
原文地址:https://blog.csdn.net/chaogu94/article/details/140717532
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!