ElasticSearch(ES)简单介绍

2023-09-17 21:01:10

 

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
// 创建文档
POST /my_index/my_type/1
{
  "name": "John Doe",
  "age": 30,
  "city": "New York"
}

// 更新文档
POST /my_index/my_type/1/_update
{
  "doc": {
    "age": 31
  }
}

// 删除文档
DELETE /my_index/my_type/1

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

// 执行全文搜索
GET /my_index/my_type/_search
{
  "query": {
    "match": {
      "name": "John"
    }
  }
}

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

// 计算年龄的平均值
GET /my_index/my_type/_search
{
  "aggs": {
    "avg_age": {
      "avg": {
        "field": "age"
      }
    }
  }
}

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

// 查找附近的地点
GET /my_geo_index/_search
{
  "query": {
    "geo_distance": {
      "distance": "10km",
      "location": {
        "lat": 40.0,
        "lon": -74.0
      }
    }
  }
}

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

input {
  file {
    path => "/var/log/myapp.log"
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "my_logs"
  }
}

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

a22a3afdf2284645b182d3a7f663a67a.png

 

JAVA示例:

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

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.common.xcontent.XContentType;

// 创建RestHighLevelClient
RestHighLevelClient client = new RestHighLevelClient(
    RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

try {
    // 索引一个文档
    IndexRequest request = new IndexRequest("my_index");
    String jsonString = "{\"name\":\"Alice\",\"age\":28}";
    request.source(jsonString, XContentType.JSON);
    IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

    // 获取文档
    GetRequest getRequest = new GetRequest("my_index", "_doc", "1");
    GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
    if (getResponse.isExists()) {
        String sourceAsString = getResponse.getSourceAsString();
        System.out.println("文档内容:" + sourceAsString);
    } else {
        System.out.println("文档不存在。");
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        // 关闭客户端
        client.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

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

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

 

更多推荐

自定义协议、序列化与反序列化

在编写TCP和UDP程序的时候,我们很自然的就使用了读取的函数对数据进行获取,对于UDP来说提供的是无连接的以数据报的形式进行传输,对于TCP来说是面向数据流的,在之前的程序中我们只是进行了读取的操作,但是并没有对读取的内容进行分析。那如果我们要传输一些结构化的数据的话,那么就需要引入"协议"这个概念。网络版计算器在本

前后端分离毕设项目之产业园区智慧公寓管理系统设计与实现(内含源码+文档+教程)

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌🍅由于篇幅限制,想要获取完整文章或者源码,或者代做,拉到文章底部即可看到个人VX。🍅2023年-2024年最新计算机毕业设计本科选题大全汇总感兴趣的可以先收藏

如何选择适合你的隧道爬虫ip?

隧道爬虫IP在保护你的网络隐私和提供安全的数据传输方面起着关键作用。然而,在众多的商家中选择适合自己的并非易事。本文将分享一些关键的考虑因素,帮助你选择适合你的隧道爬虫IP商家。无论你是个人用户还是企业客户,相信这些指南都能帮助你做出明智的选择,确保你的网络连接安全可靠。一、明确你的需求1、安全性需求:确定你对数据隐私

webpack 基础配置

常见配置文件打包的出口和入口webpack如何开启一台服务webpack如何打包图片,静态资源等。webpack配置loader配置plugin配置sourceMap配置babel语法降级等接下来,我们先从webpack的基本配置开始吧!在准备配置之前,搭建一个webpack工程,你可以在自己的工程下npminit或者

spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值

😀前言本章是spring基于XML配置bean系类中第3篇讲解了spring怎么去引用/注入集合/数组类型和怎么通过util名称空间创建list以及怎么去通过级联属性赋值🏠个人主页:尘觉主页🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉在csdn获奖荣誉:🏆csdn城市之星

VMware 三种网络连接模式

VMware虚拟机的三种网络连接模式:桥接,NAT,仅主机。网卡vmnet0,vmnet1,vmnet8区别。在VMware中,虚拟机的网络连接主要是由VMware创建的虚拟交换机负责实现的,VMware可以根据需要创建多个虚拟网络。VMware的虚拟网络都是以“VMet+数字”的形式来命名的,例如VMnet0,VMn

什么是内存碎片?

在嵌入式系统中,内存是十分有限而且是十分珍贵的,用一块内存就少了一块内存,而在分配中随着内存不断被分配和释放,整个系统内存区域会产生越来越多的碎片。因为在使用过程中,申请了一些内存,其中一些释放了,导致内存空间中存在一些小的内存块,它们地址不连续,不能够作为一整块的大内存分配出去,所以一定会在某个时间,系统已经无法分配

如何与Linamar Corp 建立EDI连接?

LinamarCorp(以下简称Linamar)是一家全球领先的汽车零部件制造商,总部位于加拿大。随着业务的不断扩展,Linamar需要与其供应商、分销商和合作伙伴之间实现更高效的业务交流和数据共享。为了提高业务流程的自动化水平,降低人工处理成本,并加强与合作伙伴之间的合作,Linamar决定实施EDI项目。Linam

【专业课130分】重邮801上岸经验分享

这个系列会邀请往届学长学姐进行经验分享~经验贴征集:前人栽树,后人乘凉,上岸同学也是看着经验贴一点一点过来的,有偿征集各位同学的经验分享,以此来帮助更多的学弟学妹们!经验不限,形式不限,各科经验均可,没有上岸也可以有失败经验。文章一经采用就会得到稿费,快来投稿吧!!!一、学长经验分享本篇是来自重庆邮电大学801专业课1

如何选择一只股票,待完善。

目录ROE(盈利能力)增长率(成长能力)收现比(营收质量)总资产周转率(经营能力)增长率(成长能力)商誉净资产比(排雷)流动比率(排雷)ROE(盈利能力)什么是ROE?ROE全名叫ReturnofEquity,翻成中文叫“股东回报率”,也叫"净资产收益率"。净资产收益率反映了一个公司的盈利能力,以及企业为股东创造价值的

简单理解事件冒泡和事件捕获

事件冒泡和事件捕获DOM事件流会依次经历3个阶段(事件也会依次触发):(1)捕获阶段:事件从文档的根节点流向目标对象。(2)当前目标阶段:在目标对象上被触发。(3)冒泡阶段:从目标对象回溯到文档的根节点。默认事件是冒泡阶段发生,如果设置了事件,那么会依次触发,内层事件执行完成,才会冒泡触发上一层。1、事件冒泡如图是3个

热文推荐