当前位置: 首页 > news >正文

【ELK】【Elasticsearch】数据查询方式

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:组合查询(支持 mustshouldmust_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:计算指标(如 sumavgmaxmin)。

  • 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 查询:功能强大,适合生产环境。

  • 聚合查询:适合数据分析。

  • 过滤查询:适合精确匹配。

  • 高亮查询:适合突出显示搜索结果。

  • 分页查询:适合大数据量场景。

  • 脚本查询:支持自定义逻辑。

根据具体场景选择合适的查询方式,可以提高查询效率和准确性。

相关文章:

  • ros的rqt工具箱的使用(持续更新)
  • 清华大学deepseek教程第四版 DeepSeek+DeepResearch 让科研像聊天一样简单(附下载)
  • 【Gee】Day4:分组控制
  • MySQL日志undo log、redo log和binlog详解
  • EasyRTC:基于WebRTC与P2P技术,开启智能硬件音视频交互的全新时代
  • Grok 使用指南
  • StarRocks FE leader节点CPU使用率周期性的忽高忽低问题分析
  • 【mysql间隙锁何时出现及锁定范围】
  • vue项目接入谷歌登录
  • 【深度学习】Pytorch项目实战-基于协同过滤实现物品推荐系统
  • Redis存在线程安全吗?为什么?
  • 2025蓝桥杯JAVA编程题练习Day5
  • deepseek本地部署以及搭建知识库
  • C++(17):为optional类型构造对象
  • 有序任务规划的局限性
  • 深度学习基础--ResNet网络的讲解,ResNet50的复现(pytorch)以及用复现的ResNet50做鸟类图像分类
  • 【目标检测】【PANet】Path Aggregation Network for Instance Segmentation
  • 深入浅出:理解闭包在JavaScript中的应用
  • Promptic:Python 中的 LLM 应用开发利器
  • 什么是接口自动化测试?接口自动化测试的目的是什么?
  • 传统文化网站建设/谷歌手机网页版入口
  • 武汉网站建设网站/seo深圳优化
  • 美橙做过网站案例/会计培训班需要学多长时间