个人博客

记录工作中的点点滴滴


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

Elasticsearch:Dynamic mapping

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 1.9k 字 | 阅读时长 ≈ 7 分钟

Elasticsearch最重要的功能之一是它试图摆脱你的方式,让你尽快开始探索你的数据。 要索引文档,您不必首先创建索引,定义映射类型和定义字段 - 您只需索引文档,那么index,type和field将自动生效。比如:

PUT data/_doc/1 
{ "count": 5 }

上面的命令将自动帮我们生成一个叫做data的index,并同时生成一个叫做_doc的type及一个叫做count的field。count的数据类型是long。这个非常方便,我们不想传统的RDMS那样,先要创建一个数据库,让后一个table,然后才可以向table里写入数据。

自动检测和添加新字段称为动态映射。 动态映射规则可以根据您的目的进行定制:

  • 动态字段映射:管理动态field检测的规则
  • 动态模板:用于配置动态添加字段的映射的自定义规则

在今天的这篇文章中,我们来分别介绍这两个方面的内容。

阅读全文 »

Elasticsearch:Cluster备份 Snapshot及Restore API

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 1.9k 字 | 阅读时长 ≈ 7 分钟

Elasticsearch提供了replica解决方案,它可以帮我们解决了如果有一个或多个node失败了,那么我们的数据还是可以保证完整的情况,并且搜索还可以继续进行。但是,有一种情况是我们的所有的node,或者有一部分node失败,可能会造成我们的数据的丢失。也就是说replca不能提供一种灾难性的保护机制。我们需要一种完整的备份机制。

Snapshot及Restore

在Elastic里,我们提供了一个叫做snapshot及restore API的接口。使您可以使用数据和状态快照备份您的Elasticsearch索引和集群。 快照很重要,因为快照会在出现问题时提供您数据的副本。 如果需要回滚到旧版本的数据,则可以从存储库中还原快照。

如上图所示,我们可以把当前index的状态及数据存入到一个repository里去。

阅读全文 »

Elasticsearch:aggregation介绍

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 5k 字 | 阅读时长 ≈ 25 分钟

聚合(aggregation)功能集是整个Elasticsearch产品中最令人兴奋和有益的功能之一,主要是因为它提供了一个非常有吸引力对之前的facets的替代。

在本教程中,我们将解释Elasticsearch中的聚合(aggregation)并逐步介绍一些示例。 我们比较了指标聚合和存储桶聚合,并展示了如何利用聚合嵌套(对于facets而言这是不可能的)。 欢迎您在本文中复制所有示例代码。

关于Elastic Facets的一点背景

如果您曾经使用过Elasticsearch的facets,那么您肯定了解它们的实用性。 经过丰富的经验,我们在这里告诉您Elasticsearch聚合(aggregations)甚至更好。 facets使您可以快速计算和汇总查询结果,并且可以将其用于各种任务,例如结果值的动态计数或创建分布直方图。 尽管facets非常强大,但它们在Elasticsearch核心中的实现存在一些限制。 由于facets仅执行一级深度的计算,因此将它们组合起来并不容易。

聚合(Aggregation)API(https://www.elastic.co/guide/en/elasticsearch/client/java-api/7.4/java-aggs.html)解决了这些问题,并且还提供了一种简单的方法在查询时(在单个请求中)进行的非常精确的多级计算。 简而言之:Elasticsearch聚合是对facets的一个更加全面的提高的。

准备数据

为了完成我们今天的练习,我们先来准备一些数据。我们想创建一个叫做sports的索引。为此,我们先创建一个mapping:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PUT sports
{
"mappings": {
"properties": {
"birthdate": {
"type": "date",
"format": "dateOptionalTime"
},
"location": {
"type": "geo_point"
},
"name": {
"type": "keyword"
},
"rating": {
"type": "integer"
},
"sport": {
"type": "keyword"
}
}
}
}

在上面,我们定义了一个sports索引的mapping。在下面,我们通过bulk API来把我们想要的数据导入到索引中。

阅读全文 »

Elasticsearch: Join数据类型

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 3k 字 | 阅读时长 ≈ 13 分钟

在Elasticsearch中,Join可以让我们创建parent/child关系。Elasticsearch不是一个RDMS。通常join数据类型尽量不要使用,除非不得已。那么Elasticsearch为什么需要Join数据类型呢?

在Elasticsearch中,更新一个object需要root object一个完整的reindex:

  • 即使是一个field的一个字符的改变
  • 即便是nested object也需要完整的reindex才可以实现搜索

通常情况下,这是完全OK的,但是在有些场合下,如果我们有频繁的更新操作,这样可能对性能带来很大的影响。

如果你的数据需要频繁的更新,并带来性能上的影响,这个时候,join数据类型可能是你的一个解决方案。

join数据类型可以完全地把两个object分开,但是还是保持这两者之前的关系。

  1. parent及child是完全分开的两个文档
  2. parent可以单独更新而不需要重新reindex child
  3. children可以任意被添加/串改/删除而不影响parent及其它的children

与 nested类型类似,父子关系也允许您将不同的实体关联在一起,但它们在实现和行为上有所不同。 与nested文档不同,它们不在同一文档中,而parent/child文档是完全独立的文档。 它们遵循一对多关系原则,允许您将一种类型定义为parent类型,将一种或多种类型定义为child类型

即便join数据类型给我们带来了方便,但是,它也在搜索时给我带来额外的内存及计算方便的开销。

注意:目前Kibana对nested及join数据类型有比较少的支持。如果你想使用Kibana来在dashboard里展示数据,这个方面的你需要考虑。在未来,这种情况可能会发生改变。

join数据类型是一个特殊字段,用于在同一索引的文档中创建父/子关系。 关系部分定义文档中的一组可能关系,每个关系是父(parent)名称和子(child)名称。

阅读全文 »

Elasticsearch 使用URI Search

发表于 2020-01-02 | 更新于: 2020-01-02 | 分类于 elk
| 字数统计: 2k 字 | 阅读时长 ≈ 8 分钟

在Elasticsearch中,我们可以使用_search终端进行搜索。这个在我之前的文章 “开始使用Elasticsearch (2)” 中有很多的描述。针对这种搜索,我们可以使用强大的DSL进行搜索。在Elasticsearch中,还有一类是基于URI的搜索。对于这种它可以很方便地直接在浏览器中的地址栏或命令行中直接使用。 使用此模式执行搜索时,并非所有搜索选项都公开,但是对于快速的“curl tests”来说,它可能很方便。在今天的文章中,我们来做一个简单的描述。同时我需要指出来的是,这里的语法和Kibana中的Search Bar搜索语法是一样的。

安装Elastic Stack

准备好数据

为了说明问题的方便,我们首先在Kibana中使用如下的bulk指令来创建我们的twitter索引。

1
2
3
4
5
6
7
8
9
10
11
12
13
POST _bulk
{ "index" : { "_index" : "twitter", "_id": 1} }
{"user":"张三","message":"今儿天气不错啊,出去转转去","uid":2,"age":20,"city":"北京","province":"北京","country":"中国","address":"中国北京市海淀区","location":{"lat":"39.970718","lon":"116.325747"}, "DOB":"1980-12-01"}
{ "index" : { "_index" : "twitter", "_id": 2 }}
{"user":"老刘","message":"出发,下一站云南!","uid":3,"age":30,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区台基厂三条3号","location":{"lat":"39.904313","lon":"116.412754"}, "DOB":"1981-12-01"}
{ "index" : { "_index" : "twitter", "_id": 3} }
{"user":"李四","message":"happy birthday!","uid":4,"age":30,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区","location":{"lat":"39.893801","lon":"116.408986"}, "DOB":"1982-12-01"}
{ "index" : { "_index" : "twitter", "_id": 4} }
{"user":"老贾","message":"123,gogogo","uid":5,"age":35,"city":"北京","province":"北京","country":"中国","address":"中国北京市朝阳区建国门","location":{"lat":"39.718256","lon":"116.367910"}, "DOB":"1983-12-01"}
{ "index" : { "_index" : "twitter", "_id": 5} }
{"user":"老王","message":"Happy BirthDay My Friend!","uid":6,"age":50,"city":"北京","province":"北京","country":"中国","address":"中国北京市朝阳区国贸","location":{"lat":"39.918256","lon":"116.467910"}, "DOB":"1984-12-01"}
{ "index" : { "_index" : "twitter", "_id": 6} }
{"user":"老吴","message":"好友来了都今天我生日,好友来了,什么 birthday happy 就成!","uid":7,"age":90,"city":"上海","province":"上海","country":"中国","address":"中国上海市闵行区","location":{"lat":"31.175927","lon":"121.383328"}, "DOB":"1985-12-01"}

这里总共有6条数据。

阅读全文 »
1…131415…29
永夜初晗凝碧天

永夜初晗凝碧天

Linux,Python,MySQL,ELK Stack,K8S,Docker

141 日志
55 分类
60 标签
RSS
QQ E-Mail
友情链接
  • 博客园
  • 百度
近期文章
  • Elasticsearch IK 分词器
  • 为Elasticsearch启动https访问
  • FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置
  • Elasticsearch:使用_update_by_query更新文档
  • Solutions:安全的APM服务器访问
© 2019 — 2020 永夜初晗凝碧天
博客全站字数统计 : 412.1k 字 ||载入天数...载入时分秒...
本文总阅读量次 || 本站访客数人次 || 本站总访问量次