【ES三周年】腾讯云 x Elasticsearch使用方法及代码(es五周年是什么时候)
 南窗  分类:IT技术  人气:218  回帖:0  发布于1年前 收藏

一、什么是Elasticsearch Service(ES)

(1)简介

简单来说,我们的目标是帮助每个人更快地找到所需内容,从需要通过内网获取文档的员工,到在网上购物寻找适合自己鞋子的客户。但从更技术的角度来说,大致描述如下:

Elasticsearch 是一个免费且开放的分布式搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

Elasticsearch分布式搜索引擎,可以对海量数据进行存储、全文检索、统计分析等,提供了 RESTful API 以及各类语言客户端,可以灵活地按照业务需求进行开发。

(2)Elasticsearch 的用途是什么?

Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:

  • 应用程序搜索
  • 网站搜索
  • 企业搜索
  • 日志处理和分析
  • 基础设施指标和容器监测
  • 应用程序性能监测
  • 地理空间数据分析和可视化
  • 安全分析
  • 业务分析

(3)Elasticsearch 的工作原理是什么?

原始数据会从多个来源(包括日志、系统指标和网络应用程序)输入到 Elasticsearch 中。数据采集指在 Elasticsearch 中进行索引之前解析、标准化并充实这些原始数据的过程。这些数据在 Elasticsearch 中索引完成之后,用户便可针对他们的数据运行复杂的查询,并使用聚合来检索自身数据的复杂汇总。在 Kibana 中,用户可以基于自己的数据创建强大的可视化,分享仪表板,并对 Elastic Stack 进行管理。

(4)Elasticsearch 索引是什么?

Elasticsearch 索引指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据。每个文档都会在一组(字段或属性的名称)和它们对应的值(字符串、数字、布尔值、日期、数值组、地理位置或其他类型的数据)之间建立联系。

Elasticsearch 使用的是一种名为倒排索引的数据结构,这一结构的设计可以允许十分快速地进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。

在索引过程中,Elasticsearch 会存储文档并构建倒排索引,这样用户便可以近实时地对文档数据进行搜索。索引过程是在索引 API 中启动的,通过此 API 您既可向特定索引中添加 JSON 文档,也可更改特定索引中的 JSON 文档。

(5)Logstash 的用途是什么?

Logstash 是 Elastic Stack 的核心产品之一,可用来对数据进行聚合和处理,并将数据发送到 Elasticsearch。Logstash 是一个开源的服务器端数据处理管道,允许您在将数据索引到 Elasticsearch 之前同时从多个来源采集数据,并对数据进行充实和转换。

(6)Kibana 的用途是什么?

Kibana 是一款适用于 Elasticsearch 的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和地图。Kibana 同时还包括诸如 Canvas 和 Elastic Maps 等高级应用程序;Canvas 允许用户基于自身数据创建定制的动态信息图表,而 Elastic Maps 则可用来对地理空间数据进行可视化。

(7)为何使用 Elasticsearch?

Elasticsearch 很快。由于 Elasticsearch 是在 Lucene 基础上构建而成的,所以在全文本搜索方面表现十分出色。Elasticsearch 同时还是一个近实时的搜索平台,这意味着从文档索引操作到文档变为可搜索状态之间的延时很短,一般只有一秒。因此,Elasticsearch 非常适用于对时间有严苛要求的用例,例如安全分析和基础设施监测。

(8)Elasticsearch 具有分布式的本质特征。Elasticsearch 中存储的文档分布在不同的容器中,这些容器称为分片,可以进行复制以提供数据冗余副本,以防发生硬件故障。Elasticsearch 的分布式特性使得它可以扩展至数百台(甚至数千台)服务器,并处理 PB 量级的数据。

(9)Elasticsearch 包含一系列广泛的功能。除了速度、可扩展性和弹性等优势以外,Elasticsearch 还有大量强大的内置功能(例如数据汇总和索引生命周期管理),可以方便用户更加高效地存储和搜索数据。

(10)Elastic Stack 简化了数据采集、可视化和报告过程。通过与 Beats 和 Logstash 进行集成,用户能够在向 Elasticsearch 中索引数据之前轻松地处理数据。同时,Kibana 不仅可针对 Elasticsearch 数据提供实时可视化,同时还提供 UI 以便用户快速访问应用程序性能监测 (APM)、日志和基础设施指标等数据。

二、站长素材网 & Elasticsearch Service(ES)

(1)站长素材网ES

站长素材网 Elasticsearch Service(ES)是基于开源搜索引擎 Elasticsearch 打造的高可用、可伸缩的云端全托管的 Elasticsearch 服务,包含 Kibana 及常用插件,并集成了安全、SQL、机器学习、告警、监控等高级特性(X-Pack)。使用站长素材网 ES,您可以快速部署、轻松管理、按需扩展您的集群,简化复杂运维操作,快速构建日志分析、异常监控、网站搜索、企业搜索、BI 分析等各类业务。

通过站长素材网 ES,您可以快速构建海量数据存储搜索、实时日志分析等应用,例如网站搜索导航、企业级搜索、服务日志异常监控、点击流分析等。

(2)站长素材网ES的特点

(3)应用场景

①日志分析

②信息检索

③数据分析

④数据库查询加速

三、优势

四、编程语言

Elasticsearch 使用的是标准的 RESTful 风格的 API 和 JSON。并支持很多语言,具体如下:

(1)C#

var client = new ElasticClient();

var searchResponse = client.Search<Tweet>(s => s
    .Index("social-*")
    .Query(q => q
        .Match(m => m
            .Field(f => f.Message)
            .Query("myProduct")
        )
    )
    .Aggregations(a => a
        .Terms("top_10_states", t => t
            .Field(f => f.State)
            .Size(10)
        )
    )
);

(2)GO

es, _ := elasticsearch.NewClient(elasticsearch.Config{
    Addresses: []string{"http://localhost:9200"},
})

body := `{
    "query": {
        "match": { "message": "myProduct" }
    },
    "aggregations": {
        "top_10_states": { "terms": { "field": "state", "size": 10 } }
    }
}`

res, err := es.Search(
    es.Search.WithIndex("social-*"),
    es.Search.WithBody(strings.NewReader(body)),
    es.Search.WithPretty(),
)
if err != nil {
    log.Fatalf("Error getting response: %s", err)
}

defer res.Body.Close()

(3)JAVA

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

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());            
searchSourceBuilder.aggregation(AggregationBuilders.terms("top_10_states").field("state").size(10));

SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("social-*");
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest);

(4)JAVAScript

const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })

client
  .search({
    index: 'social-*',
    body: {
      query: { match: { message: 'myProduct' } },
      aggs: {
        top_10_states: {
          terms: { field: 'state', size: 10 }
        }
      }
    }
  })
  .then(({ body }) => {
    const { hits } = body.hits
    console.log(hits)
  })
  .catch(console.error)

(5)PHP

$esclient = Elasticsearch\ClientBuilder::create()
    ->setHosts(["localhost:9200"])
    ->build();
$params = [
    'index' => 'social-*',
    'body' => [
        'query' => [
            'match' => ['message' => 'myProduct']
        ],
        'aggs' => [
            'top_10_states' => [
                'terms' => [
                    'field' => 'state',
                    'size' => 10,
                ]
            ]
        ]
    ]
];
$response = $esclient->search($params);

(6)Python

from elasticsearch import Elasticsearch

esclient = Elasticsearch(['localhost:9200'])
response = esclient.search(
    index='social-*',
    body={
        "query": {
            "match": {
                "message": "myProduct"
            }
        },
        "aggs": {
            "top_10_states": {
                "terms": {
                    "field": "state",
                    "size": 10
                }
            }
        }
    }
)

讨论这个帖子(0)垃圾回帖将一律封号处理……