• ElasticSearch(ES)简单介绍


     

    ES简介

    Elasticsearch(通常简称为ES)是一个开源的分布式搜索和分析引擎,旨在处理各种类型的数据,包括结构化、半结构化和非结构化数据。它最初是为全文搜索而设计的,但随着时间的推移,它已经演变成一个功能强大的数据分析工具,用于实时搜索、日志和事件数据分析、业务智能等各种用途。以下是关于Elasticsearch的一些关键特点和概念:

    1. 分布式性能:Elasticsearch是一个分布式系统,它可以轻松扩展到多个节点,实现水平扩展。这意味着它能够处理大规模的数据,并且在性能和容量方面具有弹性。

    2. 实时搜索:Elasticsearch提供了实时搜索功能,可以在数据变化时立即更新搜索结果。这对于需要快速获取最新数据的应用非常有用。

    3. 多数据类型支持:Elasticsearch可以处理各种类型的数据,包括文本、数字、地理空间数据等。它不仅支持全文搜索,还支持结构化查询和分析。

    4. 强大的查询语言Elasticsearch使用自定义的查询语言(基于JSON),允许您执行各种查询,包括全文搜索、过滤、聚合和排序等。它还支持模糊查询、正则表达式和多字段搜索等功能。

    5. 分布式文档存储:Elasticsearch使用倒排索引来存储文档,这使得它在搜索时非常高效。文档可以以JSON格式存储,并且可以根据需要进行动态映射。

    6. 数据聚合:Elasticsearch具有强大的聚合功能,允许您在大数据集上执行各种分析操作,如汇总、平均、最大值、最小值等。

    7. 实时数据分析:Elasticsearch与Logstash和Kibana(通常一起称为ELK Stack)集成得很好,使其成为实时日志和事件数据分析的理想选择。

    8. 开源和社区支持:Elasticsearch是开源项目,拥有庞大的开发者社区,提供了丰富的文档和插件生态系统,以满足各种需求。

    Elasticsearch的用途非常广泛,包括全文搜索引擎、日志和指标分析、业务智能、安全信息和事件管理(SIEM)、商品推荐、地理信息系统(GIS)等等。它的弹性、性能和丰富的功能使其成为许多现代应用程序架构的重要组成部分。

     

     

    代码示例:

    索引和文档操作:在Elasticsearch中,数据存储在索引中,索引由多个文档组成。以下是如何创建、更新和删除文档的示例:

    创建一个索引以及添加文档到索引:

    PUT /my_index
    
    1. // 创建文档
    2. POST /my_index/my_type/1
    3. {
    4. "name": "John Doe",
    5. "age": 30,
    6. "city": "New York"
    7. }
    8. // 更新文档
    9. POST /my_index/my_type/1/_update
    10. {
    11. "doc": {
    12. "age": 31
    13. }
    14. }
    15. // 删除文档
    16. DELETE /my_index/my_type/1

    全文搜索:Elasticsearch以其强大的全文搜索功能而闻名。

    1. // 执行全文搜索
    2. GET /my_index/my_type/_search
    3. {
    4. "query": {
    5. "match": {
    6. "name": "John"
    7. }
    8. }
    9. }

    聚合:Elasticsearch允许执行各种聚合操作,如统计、平均值和分组等。

    1. // 计算年龄的平均值
    2. GET /my_index/my_type/_search
    3. {
    4. "aggs": {
    5. "avg_age": {
    6. "avg": {
    7. "field": "age"
    8. }
    9. }
    10. }
    11. }

    地理空间搜索:Elasticsearch支持地理空间数据,可以执行地理位置的搜索和聚合。

    1. // 查找附近的地点
    2. GET /my_geo_index/_search
    3. {
    4. "query": {
    5. "geo_distance": {
    6. "distance": "10km",
    7. "location": {
    8. "lat": 40.0,
    9. "lon": -74.0
    10. }
    11. }
    12. }
    13. }

    Logstash集成:Logstash是一个用于数据收集、转换和发送到Elasticsearch的工具。

    1. input {
    2. file {
    3. path => "/var/log/myapp.log"
    4. }
    5. }
    6. output {
    7. elasticsearch {
    8. hosts => ["localhost:9200"]
    9. index => "my_logs"
    10. }
    11. }

    Kibana可视化:Kibana是Elasticsearch的可视化工具,用于创建仪表板和图表。

    a22a3afdf2284645b182d3a7f663a67a.png

     

    JAVA示例:

    当使用Elasticsearch进行编程时,通常使用Elasticsearch的客户端库,如Elasticsearch RestHighLevelClient(用于Java)或其他语言的类似库。以下是Java中使用Elasticsearch RestHighLevelClient进行一些常见操作的简化代码示例:

    1. import org.elasticsearch.client.RequestOptions;
    2. import org.elasticsearch.client.RestHighLevelClient;
    3. import org.elasticsearch.action.index.IndexRequest;
    4. import org.elasticsearch.action.index.IndexResponse;
    5. import org.elasticsearch.action.get.GetRequest;
    6. import org.elasticsearch.action.get.GetResponse;
    7. import org.elasticsearch.common.xcontent.XContentType;
    8. // 创建RestHighLevelClient
    9. RestHighLevelClient client = new RestHighLevelClient(
    10. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    11. );
    12. try {
    13. // 索引一个文档
    14. IndexRequest request = new IndexRequest("my_index");
    15. String jsonString = "{\"name\":\"Alice\",\"age\":28}";
    16. request.source(jsonString, XContentType.JSON);
    17. IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
    18. // 获取文档
    19. GetRequest getRequest = new GetRequest("my_index", "_doc", "1");
    20. GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
    21. if (getResponse.isExists()) {
    22. String sourceAsString = getResponse.getSourceAsString();
    23. System.out.println("文档内容:" + sourceAsString);
    24. } else {
    25. System.out.println("文档不存在。");
    26. }
    27. } catch (IOException e) {
    28. e.printStackTrace();
    29. } finally {
    30. try {
    31. // 关闭客户端
    32. client.close();
    33. } catch (IOException e) {
    34. e.printStackTrace();
    35. }
    36. }

    这个示例演示了如何使用Java的Elasticsearch RestHighLevelClient库来索引文档、获取文档,并在完成操作后关闭客户端。请确保将适当的依赖项添加到项目中,以便使用Elasticsearch客户端库。

    对于Elasticsearch的更高级用法和配置,可以参考官方文档和相关教程。不同编程语言的Elasticsearch客户端库也会有一些语法差异,所以具体的示例代码可能会有所不同。

     

  • 相关阅读:
    了解eslint的使用
    算法-版本号升级
    MySQL浅析之架构概览
    线上展厅怎么做要多长时间
    运动品牌如何做到“全都要”?来看看安踏的答案
    八皇后问题的实现(思路分析) [数据结构][Java]
    phpldapadmin This base cannot be created with PLA
    获取HTML元素的offsetParent属性
    内网渗透——macOS上搭建Web服务器
    [计算机网络]-网络层-概述及虚电路和数据报网络
  • 原文地址:https://blog.csdn.net/qq_57747969/article/details/132953103