人在江湖之Elasticsearch
文章平均质量分 95
一个分布式的实时文档存储,每个字段 可以被索引与搜索
一个分布式实时分析搜索引擎
能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
没事儿写两篇
授之以鱼不如授之以渔
展开
-
Elasticsearch 快照生命周期管理(自动化快照)
在我们实际工作中,常常是需要定期快照,定期保存的,避免数据丢失。retention 中的配置表示,快照有效期3天,最大个数为50个(大于50即便没过期最旧的也会被删除),最小个数为5个(即便过期了,也不会被删除)human 表示以人类可以看懂的方式回显(虽然直接看也费劲),比如我们的结果中时间就会显示为年月日的方式,而不是直接的毫秒数。快照名称是动态的,按时间格式生成的。结果中的时间都是UTC时间,es 中好像不支持配置时区,所以这些时间查询出来需要做时区处理。如果策略已经存在,则此请求会增加策略的版本。原创 2023-08-04 20:00:00 · 501 阅读 · 0 评论 -
Elasticsearch 快照和恢复
快照是正在运行的Elasticsearch集群的备份。定期备份群集,无需停机删除或硬件故障后恢复数据在群集之间传输数据等默认情况下,集群的快照包含集群状态、所有常规数据流和所有常规索引快照必须存储在存储库中,存储库的内容不能修改,否则会造成快照损坏或导致数据不一致等一系列问题。所以在创建快照之前,需要先创建存储库。原创 2023-08-02 16:29:22 · 1670 阅读 · 0 评论 -
Elasticsearch 集群安装
第一次启动 Elasticsearch 集群需要在集群中的一个或多个符合主资格的节点上显式定义一组初始符合主资格的节点,这称为集群引导。对于整个集群来说,主节点非常重要,主节点负责的集群事物也很多,意味着主节点要消耗更多的资源,为避免主节点因其他事物而过载,我们可以设置主节点为专用主节点。仅投票的主节点是参与 主节点选举但不会充当集群选举主节点的节点。注意:新节点启动之后,还会有集群间的分配平衡过程,此过程会消耗一定的时间,所以在一定的时间范围内,我们可能得到yellow 的状态,这是正常现象。原创 2023-07-19 16:07:44 · 1192 阅读 · 0 评论 -
Elasticsearch 脚本编写基础
脚本语言painlessES 的脚本语言可以通过 lang 来设置,如果不设置,默认为 Painless。Painless 专为 Elasticsearch 构建,可用于脚本 API 中的任何目的,并提供最大的灵活性。而且 Painless 是 ES 内置的,无需安装其他插件来支持,而且Painless 使用 Java 语法的子集, Painless 实现了任何具有基本编码经验的人都自然熟悉的语法。expressionsLucene 的表达式语言将javascript表达式编译为字节码。脚本使原创 2023-06-30 13:30:00 · 522 阅读 · 0 评论 -
Elasticsearch 聚合查询(下)
查询 10 ~ 20 岁 和 20 ~ 30 岁 和 其他年龄段的年龄统计数据(max、min、sum、avg、count),并筛选平均年龄大于20的桶。查询 10 ~ 20 岁 和 20 ~ 30 岁 和 其他年龄段的年龄统计数据(max、min、sum、avg、count),并查询平均年龄最小的桶。注意我们的示例其实没有实际的意义,只为了讲解 bucket_selector 的用法而已,实际中,可能是计算商品总金额超过800w的某些类型的商品。由于我们数据的特殊原因,此处计算出的男女的年龄差都是40。原创 2023-06-29 20:00:00 · 177 阅读 · 0 评论 -
Elasticsearch 聚合查询(上)
是以内存换取准确性的做法。比如我们的实际数量为1003,如果我们设置 precision_threshold 为 100 或更小,将得到不一样的值。我们示例是使用的字段中的id值,此值是不重复的值,所以计数为文档总数。示例表示查询索引 person ,按 age 分组,分组结果按照 年龄 升序排列。索引 person 中 “age” 年龄字段的平均值,字段结果 为 “avg_grade”,“size” 为0,表示不查询具体的文档结果。entropy:是一个负责的计算,是对聚合收集的所有项计算的香农熵值。原创 2023-06-29 13:44:15 · 137 阅读 · 0 评论 -
Elasticsearch 查询进阶
特别当我们使用 search_after 进行分页查询时,数据到变化可能导致分页的结果不准确,这时候我们常常创建一个时间点,让 search_after 的请求都使用该时间点的索引状态来进行查询,用以避免分页结果不准确的问题。2:如果当前只迭代到第10页,我们要直接跳转查询第282页的数据,也是比较困难的)除了使用带有 PIT 参数的 search_after 查询分页之外,ES 还支持滚动搜索查询(scroll),但新版本的 ES 已经不再建议使用该方式进行分页查询,所以我们就不再讨论这个问题了。原创 2023-06-19 16:37:48 · 1002 阅读 · 0 评论 -
Elasticsearch 中文分词器
下载时注意和es的版本对应,我们es版本为:8.6.2。在 ik 的文件的 config 目录下有 ik 分词的配置文件(IKAnalyzer.cfg.xml)以及相关的 dic 字典文件。在ES home/plugins 目录下创建目录 ik,并将我们下载下zip包解压到 es_home/plugins/ik 目录下。远程扩展字典的方式无需重启 ES 服务,只是在字典管理上来说,扩展字段文件独立于 ES 服务了,可能带来不便。查看结果,最终的分词中一定会有“科比布莱恩特”这样完整的词语。原创 2023-06-09 11:27:15 · 1686 阅读 · 0 评论 -
Elasticsearch 文本分析器(下)
自定义字符过滤器 my_custom_html_strip_char_filter ,以 html_strip 过滤器为基础,设置了跳过 b 标签不过滤。注意配置参数:我们配置了一个自定义的分词器 my_tokenizer ,以 standard 为基础类型,然后配置了一个自定义的分析器 my_analyzer,设置该分析器的分词器为 my_tokenizer。原创 2023-06-09 09:06:15 · 1287 阅读 · 0 评论 -
Elasticsearch 文本分析器(上)
说明:此示例为创建一个索引 person1,并配置了一个名为 my_english_analyzer 的文本分析器,其基础类型为 standard (意味着是以 standard 来扩展),并设置了拆分的词语最大长度为5,以及使用了 standard 预定义的停用词表。如果需要修改一个已存在的索引的分析器,可使用更新索引设置的API注:修改前请先使用 _close 接口关闭索引,否则会报如下错误:修改完成之后再打开索引即可。再次测试我们自定义的文本分析器。原创 2023-06-09 09:03:19 · 350 阅读 · 0 评论 -
Elasticsearch 基础查询
注:term 查询主要用于精确查询,不会经过文本分析(分析器分析),所以我们应该尽量避免使用term查询text类型的字段。DSL查询是Elasticsearch 提供的一个完整的基于 JSON 的查询。编辑距离是将一个术语变成另一个术语所需的一个字符更改的数量。此示例查询索引 _id 为 “507”,“699”,“567” 的文档数据。此查询将会把name中包含“钱”和“军”的都查询出来。此示例查询name字段,以“周”开头的文档。示例匹配name值为“钱军”和“钱艳”的文档。原创 2023-06-06 14:46:50 · 347 阅读 · 0 评论 -
Elasticsearch 常用数据类型和映射
(可选,布尔值)如果 为false,任何通配符表达式、索引别名或值目标仅丢失或关闭索引,请求将返回错误。例如,如果请求索引以 foo*,bar* 开头,如果有索引,以foo开头但没有索引以bar开头,则请求定位会返回错误。例如,如果请求索引以 foo*,bar* 开头,如果有索引,以foo开头但没有索引以bar开头,则请求定位会返回错误。该映射表示,我们的文档第一层的字段,只有user,新增的字段将不不会被索引或搜索,而user字段对象,car对象的字段可以动态新增并添加到映射。原创 2023-06-05 16:42:23 · 1421 阅读 · 0 评论 -
Elasticsearch REST API 文档管理
如果conflicts等于 proceed,则 reindex 可能会尝试从源中重新索引更多的文档,直到max_docs它成功地将文档索引max_docs到目标中,或者它已经遍历了源查询中的每个文档。索引重建,类似于表的拷贝,在更新现有索引映射类型的时候常常需要索引重建。我们的person 1 目前的 _seq_no = 4,_primary_term = 1,所以当前的删除请求是失败的。_id 是当前文档对唯一标识,我们文档内容中的id,为存储的数据到字段信息,他们不是必须的对应关系。原创 2023-04-21 14:47:52 · 672 阅读 · 1 评论 -
Elasticsearch REST API 索引管理
wait_for_active_shards 是 elastic 为了提高写入系统的弹性,可以将索引操作配置为等待一定数量的活动分片副本,然后再继续操作。(必需,字符串)用于限制请求的数据流、索引和别名的逗号分隔列表。d、h、m、s、ms、micros(微妙)、nanos(纳秒)(可选,布尔值)true,则响应包括来自未加载到内存中的段的信息。(可选,布尔值)true,则响应仅包含来自主分片的信息。(可选,字符串)用于对响应进行排序的列名或列别名的逗号分隔列表。(可选,布尔值)true,则响应包括列标题。原创 2023-04-17 14:21:30 · 274 阅读 · 0 评论 -
Elasticsearch 用户管理
这些内置用户存储在一个特殊的.security索引中,该索引由 Elasticsearch 管理。如果内置用户被禁用或其密码发生更改,更改会自动反映在集群中的每个节点上。但是,如果你的.security索引被删除或从快照恢复,你应用的任何更改都将丢失。原创 2023-04-04 23:19:46 · 2237 阅读 · 0 评论 -
Elasticsearch 简介与安装
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。原创 2023-03-17 16:34:05 · 1397 阅读 · 0 评论