1. 简单查询(URI Search)
通过 URL 参数直接进行查询,适合简单的搜索场景。
示例:
bash
复制
GET /index_name/_search?q=field_name:search_value
说明:
-
index_name:索引名称。 -
field_name:字段名称。 -
search_value:搜索值。
特点:
-
简单易用,适合快速测试。
-
功能有限,不支持复杂的查询逻辑。
2. DSL 查询(Query DSL)
使用 Elasticsearch 的 Query DSL(Domain Specific Language)进行查询,支持复杂的查询逻辑。
示例:
json
复制
GET /index_name/_search
{
"query": {
"match": {
"field_name": "search_value"
}
}
}
常用查询类型:
-
Match Query:全文搜索,支持分词。
json
复制
{ "query": { "match": { "field_name": "search_value" } } } -
Term Query:精确匹配,不支持分词。
json
复制
{ "query": { "term": { "field_name": { "value": "search_value" } } } } -
Range Query:范围查询。
json
复制
{ "query": { "range": { "field_name": { "gte": 10, "lte": 20 } } } } -
Bool Query:组合查询(支持
must、should、must_not)。json
复制
{ "query": { "bool": { "must": [ { "match": { "field1": "value1" } }, { "match": { "field2": "value2" } } ] } } }
特点:
-
功能强大,支持复杂的查询逻辑。
-
适合生产环境使用。
3. 聚合查询(Aggregations)
用于对数据进行统计和分析,支持多种聚合操作(如求和、平均值、分组等)。
示例:
json
复制
GET /index_name/_search
{
"size": 0,
"aggs": {
"group_by_field": {
"terms": {
"field": "field_name"
}
}
}
}
常用聚合类型:
-
Terms Aggregation:按字段值分组。
-
Metric Aggregation:计算指标(如
sum、avg、max、min)。 -
Date Histogram Aggregation:按时间区间分组。
-
Nested Aggregation:嵌套聚合。
特点:
-
适合数据分析场景。
-
可以结合 Query DSL 使用。
4. 过滤查询(Filter Context)
用于过滤数据,通常与 Query DSL 结合使用。
示例:
json
复制
GET /index_name/_search
{
"query": {
"bool": {
"filter": [
{ "term": { "field_name": "value" } }
]
}
}
}
特点:
-
过滤条件不参与评分,性能较高。
-
适合精确匹配场景。
5. 高亮查询(Highlighting)
用于高亮显示搜索结果中的匹配部分。
示例:
json
复制
GET /index_name/_search
{
"query": {
"match": {
"field_name": "search_value"
}
},
"highlight": {
"fields": {
"field_name": {}
}
}
}
特点:
-
适合需要突出显示搜索结果的场景。
6. 分页查询(Pagination)
用于分页获取数据。
示例:
json
复制
GET /index_name/_search
{
"from": 0,
"size": 10,
"query": {
"match_all": {}
}
}
说明:
-
from:起始位置。 -
size:每页大小。
特点:
-
适合大数据量的分页查询。
7. 排序查询(Sorting)
用于对搜索结果进行排序。
示例:
json
复制
GET /index_name/_search
{
"query": {
"match_all": {}
},
"sort": [
{ "field_name": { "order": "asc" } }
]
}
特点:
-
支持多字段排序。
-
可以结合分页查询使用。
8. 脚本查询(Script Query)
使用脚本进行自定义查询。
示例:
json
复制
GET /index_name/_search
{
"query": {
"script": {
"script": {
"source": "doc['field_name'].value > params.value",
"params": {
"value": 10
}
}
}
}
}
特点:
-
支持复杂的自定义逻辑。
-
性能较低,慎用。
9. 嵌套查询(Nested Query)
用于查询嵌套类型的字段。
示例:
json
复制
GET /index_name/_search
{
"query": {
"nested": {
"path": "nested_field",
"query": {
"match": {
"nested_field.sub_field": "value"
}
}
}
}
}
特点:
-
适合处理嵌套结构的文档。
10. 跨索引查询(Cross-Index Search)
可以同时查询多个索引的数据。
示例:
json
复制
GET /index1,index2/_search
{
"query": {
"match_all": {}
}
}
特点:
-
适合需要从多个索引中查询数据的场景。
总结
Elasticsearch 提供了丰富的查询方式,可以根据不同的需求选择合适的查询方法:
-
简单查询:适合快速测试。
-
DSL 查询:功能强大,适合生产环境。
-
聚合查询:适合数据分析。
-
过滤查询:适合精确匹配。
-
高亮查询:适合突出显示搜索结果。
-
分页查询:适合大数据量场景。
-
脚本查询:支持自定义逻辑。
根据具体场景选择合适的查询方式,可以提高查询效率和准确性。



















