目录
[1. Match Query](#1. Match Query)
[2. Term Query](#2. Term Query)
[3. Terms Query](#3. Terms Query)
[4. Range Query](#4. Range Query)
[5. Bool Query](#5. Bool Query)
[6. Wildcard Query](#6. Wildcard Query)
[7. Fuzzy Query](#7. Fuzzy Query)
[8. Prefix Query](#8. Prefix Query)
[9. Aggregation Query](#9. Aggregation Query)
Elasticsearch 是一个基于 Lucene 的搜索引擎,提供了丰富的查询DSL(Domain Specific Language)用于执行搜索操作。以下是Elasticsearch中常用的查询语句类型、作用、使用场景、注意事项以及每种查询的实际例子。
1. Match Query
-
作用:对文本进行全文搜索,包括模糊匹配。
-
使用场景:适用于搜索文本字段。
-
注意事项:默认情况下,对于多词搜索会采用OR操作符,可以通过operator参数修改。
-
例子 :
java{ "query": { "match": { "message": "this is a test" } } }
2. Term Query
-
作用:用于精确值匹配,不会对搜索词进行分词。
-
使用场景:适用于关键字、数字、日期等精确值字段的精确查询。
-
注意事项:不适用于文本字段,因为文本字段会在索引时分词。
-
例子:
java{ "query": { "term": { "status": { "value": "active" } } } }
3. Terms Query
-
作用:与term query类似,但允许指定多个精确值。
-
使用场景:当需要匹配多个精确值时使用。
-
注意事项:与term query相同,不适用于文本字段。
-
例子 :
java{ "query": { "terms": { "status": ["active", "pending"] } } }
4. Range Query
-
作用:用于查找在某个范围内的值。
-
使用场景:适用于数字、日期等类型的范围查询。
-
注意事项:可以使用gt、lt、gte、lte等操作符指定范围。
-
例子 :
java{ "query": { "range": { "age": { "gte": 10, "lte": 20 } } } }
5. Bool Query
-
作用:允许组合多个查询,如must、should、must_not。
-
使用场景:当需要执行复杂的查询逻辑时使用。
-
注意事项:should子句在没有must或filter时至少需要匹配一个条件。
-
例子 :
java{ "query": { "bool": { "must": [ { "match": { "title": "search" } }, { "match": { "content": "Elasticsearch" } } ], "must_not": [ { "range": { "age": { "gte": 30 } } } ], "should": [ { "term": { "tag": "wow" } }, { "term": { "tag": "elasticsearch" } } ], "minimum_should_match": 1, "boost": 1.0 } } }
6. Wildcard Query
-
作用:支持使用通配符的模糊查询。
-
使用场景:在不确定完整词项时使用。
-
注意事项:通配符查询可能会影响性能,应谨慎使用。
-
例子 :
java{ "query": { "wildcard": { "user": { "value": "ki*y" } } } }
7. Fuzzy Query
-
作用:基于Levenshtein编辑距离的模糊查询。
-
使用场景:在处理用户输入错误的情况下很有用。
-
注意事项:模糊查询会消耗更多的资源,应适度使用。
-
例子 :
java{ "query": { "fuzzy": { "name": { "value": "kiim", "fuzziness": 2 } } } }
8. Prefix Query
-
作用:搜索具有指定前缀的词项。
-
使用场景:适用于自动补全功能。
-
注意事项:与通配符查询一样,可能会影响性能。
-
例子 :
java{ "query": { "prefix": { "user": { "value": "ki" } } } }
9. Aggregation Query
-
作用:用于执行复杂的数据分析和汇总。
-
使用场景:统计分析,如计数、平均值、最大/最小值等。
-
注意事项:聚合查询可以消耗大量资源,应合理设计。
-
例子 :
java{ "size": 0, "aggs": { "group_by_state": { "terms": { "field": "state.keyword" } } } }