个人博客

记录工作中的点点滴滴


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

Elasticsearch:运用scroll接口对大量数据实现更好的分页

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

在Elasticsearch中,我们可以通过size和from来对我们的结果来进行分页。但是对于数据量很大的索引,这是有效的吗?Scroll API可用于从单个搜索请求中检索大量结果(甚至所有结果),这与在传统数据库上使用cursor的方式非常相似。Scroll不是用于实时用户请求,而是用于处理大量数据,例如,用于处理大量数据。 为了将一个索引的内容重新索引到具有不同配置的新索引中。

为了说明问题,我们今天先创建一个叫做twitter的Index:

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"}}
{ "index" : { "_index" : "twitter", "_id": 2 }}
{"user":"东城区-老刘","message":"出发,下一站云南!","uid":3,"age":30,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区台基厂三条3号","location":{"lat":"39.904313","lon":"116.412754"}}
{ "index" : { "_index" : "twitter", "_id": 3} }
{"user":"东城区-李四","message":"happy birthday!","uid":4,"age":30,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区","location":{"lat":"39.893801","lon":"116.408986"}}
{ "index" : { "_index" : "twitter", "_id": 4} }
{"user":"朝阳区-老贾","message":"123,gogogo","uid":5,"age":35,"city":"北京","province":"北京","country":"中国","address":"中国北京市朝阳区建国门","location":{"lat":"39.718256","lon":"116.367910"}}
{ "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"}}
{ "index" : { "_index" : "twitter", "_id": 6} }
{"user":"虹桥-老吴","message":"好友来了都今天我生日,好友来了,什么 birthday happy 就成!","uid":7,"age":90,"city":"上海","province":"上海","country":"中国","address":"中国上海市闵行区","location":{"lat":"31.175927","lon":"121.383328"}}

在上面,我们创建了6个文档。这些文档的数量虽然不是很多,但是我们想为了说明问题的方便。在实际的使用中,我们可能有成百上千的文档。

阅读全文 »

Elasticsearch:用户安全设置

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

Elastic Stack的组件是不安全的,因为它没有内置的固有安全性。 这意味着任何人都可以访问它。 在生产环境中运行Elastic Stack时,这会带来安全风险。 为了防止生产中未经授权的访问,采用了不同的机制来施加安全性,例如在防火墙后运行Elastic Stack并通过反向代理(例如nginx,HAProxy等)进行保护。 Elastic提供商业产品来保护Elastic Stack。 此产品是X-Pack的一部分,模块称为安全性。

在今天的文章中,我们来讲述如何为我们的Elastics索引设置字段级的安全。这样有的字段对有些用户是可见的,而对另外一些用户是不可见的。我们也可以通过对用户安全的设置,使得不同的用户有不同的权限。

User authentication

在X-Pack安全性中,安全资源是基于用户的安全性的基础。 安全资源是需要访问以执行Elasticsearch集群操作的资源,例如索引,文档或字段。 X-Pack安全性通过分配给用户的角色的权限来实现。 权限是针对受保护资源的一项或多项特权。 特权是一个命名的组,代表用户可以针对安全资源执行的一个或多个操作。 用户可以具有一个或多个角色,并且用户拥有的总权限集定义为其所有角色的权限的并集,如下图所示:

从上面的图上可以看出来:一个用户可以用多个role,而每个role可以对应多个permission(权限)。在接下来的练习中,我们来展示如何创建用户,role(角色)以及把permission分配到每个role。通过这样的组合,我们可以实现对字段级的安全控制。

为Elastic设置安全及创建用户

当我们设置完我们的安全账户后,最开始我们使用最原始的elastic的账号进行登录。请注意这里的密码是我们设置elastic账号的密码:

![](https://img-blog.csdnimg.cn/20190904225704187.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1VidW50dVRvdWNo,size_16,color_FFFFFF,t_70

等登录进去之后,现在我们去Manage/Sercurity/Users页面:

我们来创建一个新的账号。针对我的情况,我想创建一个叫做liuxg的用户名。点击当前页面的Create User按钮:

然后填入我们所需要的信息:

点击Create User按钮,这样我们就创建了我们的用户。

按照同样的步骤,我们来创建另外一个叫做user1的用户。

阅读全文 »

Elasticsearch:使用function_score及soft_score定制搜索结果的分数

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

我们将介绍使用function_score的基础知识,并介绍一些function core技术非常有用和有效的用例。

介绍

评分的概念是任何搜索引擎(包括Elasticsearch)的核心。评分可以粗略地定义为:找到符合一组标准的数据并按相关性顺序将其返回。相关性通常是通过类似TF-IDF的算法来实现的,该算法试图找出文本上与提交的查询最相似的文档。尽管TF-IDF及其表亲(例如BM25)非常棒,但有时必须通过其他算法或通过其他评分启发式方法来解决相关性问题。在这里,Elasticsearch的script_score和function_score功能变得非常有用。本文将介绍这些工具的用法。

文本相似性不是最重要因素的一个域示例是地理搜索。如果正在寻找在给定点附近的好咖啡店,则按与查询在文本上的相似程度对咖啡店进行排名对用户而言不是很有用,但按地理位置在附近的排名对他们。

另一个示例可能是视频共享站点上的视频,其中搜索结果可能应该考虑视频的相对受欢迎程度。如果某个流行歌星上传了具有给定标题的视频,从而获得了数百万的观看次数,那么该视频可能应该比具有相似文字相关性的不受欢迎的视频更胜一筹。

在使用Elasticsearch进行全文搜索的时候,默认是使用BM25计算的_score字段进行降序排序的。当我们需要用其他字段进行降序或者升序排序的时候,可以使用sort字段,传入我们想要的排序字段和方式。 当简单的使用几个字段升降序排列组合无法满足我们的需求的时候,我们就需要自定义排序的特性,Elasticsearch提供了function_score的DSL来自定义打分,这样就可以根据自定义的_score来进行排序。

在实际的使用中,我们必须注意的是:soft_score和function_score是耗资源的。您只需要计算一组经过过滤的文档的分数。

下面我们来用一个例子来具体说明如何来通过script_core和function_core来定制我们的分数。

阅读全文 »

Elasticsearch:如何把Elasticsearch中的数据导出为CSV格式的文件

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

本教程向您展示如何将数据从Elasticsearch导出到CSV文件。 想象一下,您想要在Excel中打开一些Elasticsearch中的数据,并根据这些数据创建数据透视表。 这只是一个用例,其中将数据从Elasticsearch导出到CSV文件将很有用。

方法一

其实这种方法最简单了。我们可以直接使用Kibana中提供的功能实现这个需求。

我们首先来准备数据:

再接着选择Add data。这样我们的Elasticsearch中就会有我们的eCommerce索引了。

我们接着选择Discover,并选择我们刚才建立的eCommerce索引。

我们同时要记得在time picker里选择我们所需要的时间段:

阅读全文 »

Elasticsearch:top_hits aggregation

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

top_hits指标聚合器跟踪要聚合的最相关文档。 该聚合器旨在用作子聚合器,以便可以按存储分区汇总最匹配的文档。

top_hits聚合器可以有效地用于通过存储桶聚合器按某些字段对结果集进行分组。 一个或多个存储桶聚合器确定将结果集切成哪些属性。

选项:

  • from-要获取的第一个结果的偏移量。
  • size-每个存储桶要返回的最匹配匹配项的最大数目。 默认情况下,返回前三个匹配项。
  • 排序-匹配的热门匹配的排序方式。 默认情况下,命中按主要查询的分数排序。

我们还是来用一个例子来展示如何使用这个:

准备数据:

我们选用Kibana里带的官方的Sample web logs来作为我们的索引:

然后加载我们的索引:

这样我们的数据就加载完成了。

阅读全文 »
1…101112…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 字 ||载入天数...载入时分秒...
本文总阅读量次 || 本站访客数人次 || 本站总访问量次