Elasticsearch 的查询写法取决于查询目的和使用的 API。下面我用最常见场景 + 示例给你一个速查式说明,基本够 90% 使用场景。
Elasticsearch 查询主要用 Query DSL(JSON),核心结构是:
{
"query": {
...
}
}
适合:keyword、id、状态、枚举
{
"query": {
"term": {
"status": "active"
}
}
}
⚠️ 不要对 text 类型字段用 term
适合:text 类型字段
{
"query": {
"match": {
"title": "elasticsearch 查询"
}
}
}
{
"query": {
"multi_match": {
"query": "elasticsearch",
"fields": ["title", "content"]
}
}
}
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 500
}
}
}
}
{
"query": {
"exists": {
"field": "email"
}
}
}
{
"query": {
"bool": {
"must": [
{ "match": { "title": "elasticsearch" } }
],
"filter": [
{ "term": { "status": "active" } },
{ "range": { "create_time": { "gte": "2024-01-01" } } }
]
}
}
}
说明:
must:必须匹配(影响评分)filter:必须匹配(不评分,快)should:可选匹配must_not:不能匹配{
"from": 0,
"size": 10,
"sort": [
{ "create_time": "desc" }
],
"_source": ["id", "title", "status"]
}
{
"query": {
"fuzzy": {
"title": {
"value": "elastcsearch",
"fuzziness": "AUTO"
}
}
}
}
{
"aggs": {
"status_count": {
"terms": {
"field": "status"
}
}
}
}
GET /index_name/_search
{
"query": {
"match": {
"title": "elasticsearch"
}
}
}
SearchRequest request = new SearchRequest("index_name");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("title", "elasticsearch"));
request.source(sourceBuilder);
| 问题 | 说明 |
|---|---|
| term 查 text 没结果 | text 会被分词 |
| 中文搜索不准 | 建议使用 ik 分词器 |
| 查询慢 | 多用 filter,少用 must |
| 分页深 | from + size 深分页慢,改用 search_after |
✅ 根据你的 索引 mapping 写精准查询
✅ 把 SQL 转成 ES 查询
✅ 写 复杂 bool + 聚合
✅ 优化慢查询
你可以直接贴:
我可以直接帮你写好 ✅
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。