ElasticSearch 常用查询示例指南
简介
本文总结了19个常用的ElasticSearch查询示例,包含具体的API调用和请求体结构,帮助开发者快速掌握ElasticSearch的查询功能。
基础查询
1. 基本匹配查询
json
POST /index/_search
{
    "query": {
        "match" : {
            "title" : "elasticsearch guide"
        }
    },
    "size": 2,
    "from": 0,
    "_source": ["title", "summary", "publish_date"],
    "highlight": {
        "fields" : {
            "title" : {}
        }
    }
}
2. 多字段查询
json
POST /index/_search
{
    "query": {
        "multi_match" : {
            "query": "elasticsearch guide",
            "fields": ["title", "summary^3"]
        }
    }
}
- ^3表示提升该字段的权重
3. 布尔查询
json
POST /index/_search
{
    "query": {
        "bool": {
            "must": [
                { "match": { "title": "elasticsearch" }},
                { "match": { "authors": "clinton gormely" }}
            ],
            "must_not": [
                { "match": { "authors": "radu gheorge" }}
            ],
            "should": [
                { "match": { "title": "solr" }}
            ]
        }
    }
}
结构化查��
4. 词条查询
json
POST /index/_search
{
    "query": {
        "term": {
            "publisher": "manning"
        }
    },
    "sort": [
        { "publish_date": {"order": "desc"}},
        { "title": { "order": "desc" }}
    ]
}
5. 范围查询
json
POST /index/_search
{
    "query": {
        "range": {
            "publish_date": {
                "gte": "2015-01-01",
                "lte": "2015-12-31"
            }
        }
    }
}
高级查询
6. 模糊查询
json
POST /index/_search
{
    "query": {
        "multi_match": {
            "query": "comprihensiv guide",
            "fields": ["title", "summary"],
            "fuzziness": "AUTO"
        }
    }
}
7. 短语匹配查询
json
POST /index/_search
{
    "query": {
        "match_phrase": {
            "summary": {
                "query": "search engine",
                "slop": 3
            }
        }
    }
}
8. 函数评分查询
json
POST /index/_search
{
    "query": {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": "search engine",
                    "fields": ["title", "summary"]
                }
            },
            "field_value_factor": {
                "field": "num_reviews",
                "modifier": "log1p",
                "factor": 2
            }
        }
    }
}
过滤和聚合
9. 过滤查询
json
POST /index/_search
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "title": "elasticsearch"
                }
            },
            "filter": {
                "range": {
                    "num_reviews": {
                        "gte": 20
                    }
                }
            }
        }
    }
}
10. 聚合查询
json
POST /index/_search
{
    "size": 0,
    "aggs": {
        "group_by_publisher": {
            "terms": {
                "field": "publisher"
            }
        }
    }
}
性能优化建议
- 
查询优化 - 使用过滤器代替查询,过滤器结果可以被缓存
- 避免使用通配符开头的模糊查询
- 合理设置分片数量
 
- 
索引优化 - 根据业务需求设置合适的分词器
- 合理设置字段类型和映射
- 使用别名进行索引管理
 
- 
系统优化 - 合理设置内存和JVM参数
- 定期进行数据优化和合并
- 监控集群状态
 
常见错误处理
- 查询超时
json
POST /index/_search
{
    "timeout": "10s",
    "query": { ... }
}
- 结果深度分页
json
POST /index/_search
{
    "from": 0,
    "size": 50,
    "query": { ... },
    "sort": { ... }
}
实用工具
- Kibana Dev Tools - 用于测试和调试查询
- Elasticsearch Head - 集群管理和数据可视化
- Cerebro - 集群监控工具
总结
ElasticSearch提供了强大而灵活的查询API,可以满足各种复杂的搜索需求。开发者应该:
- 深入理解各种查询类型的特点和使用场景
- 注意查询性能优化
- 合理使用过滤器和缓存机制
- 建立完善的监控和维护机制
参考资料
注:本文示例基于ElasticSearch 7.x版本,不同版本的语法可能略有差异。建议参考官方文档获取最新信息。