随笔分类 - 搜索引擎
和有关搜索相关的内容,包括:elasticsearch 和 solr
摘要:一、cat 参数规范 二、cat API 1. 查看集群健康情况 GET /_cat/health?v 2. 查看集群上整个索引 或 指定索引 统计信息 GET /_cat/indices?v GET /_cat/indices/food20200909?v 3. 查看集群整体分片 或 指定索引分片
阅读全文
摘要:首先我们需要清楚: ES 中的文档是不可变更的。如果你更新一个文档,会将文档标记为删除,同时增加一个全新的文档,与此同时文档的 version 字段也会加 1。 那么 es7.x 之后,对应的 version 让然保留着,但是内部乐观锁版本控制是通过另外两个新引入的字段来控制的,分别是:seq_no
阅读全文
摘要:1、索引命名规范 索引命名有如下限制: 仅限小写字母 不能包含 \、/、 *、?、"、<、>、|、# 以及 空格符等 特殊符号 从 7.0 版本开始不再包含 冒号 不能以 -、_ 或 + 开头 不能超过 255 个字节(注意它是字节,因此多字节字符将计入255个限制) 2、新建索引 (1)索引名小写
阅读全文
摘要:1、搜索 _source 数据列过滤 我们常常在 kibana 的 devTools 中书写相关的 dsl 语句,但是有时候想要过滤一些字段明明知道es 应该有这样的功能,但是就是想不起来,今天在这里汇总一下: "_source": false // 不显示任何source字段 "_source":
阅读全文
摘要:1、震荡问题 搜索同一 query,结果ES返回的顺序却不尽相同,可能会有两个原因导致此问题发生: 这就是请求轮询到不同分片,而未设置排序条件,相同相关性评分情况下,是按照所在 segment 中 lucene id 来排序的,相同数据的不同备份之间该 id 是不能保证一致的,故造成结果震荡问题。
阅读全文
摘要:不分配大内存给 Elasticsearch,事实上 jvm 在内存 < 32G 的时候会采用一个:内存对象指针压缩技术。 需要明白:不一定是 32GB,一般 linux 系统上都是介于 (31, 32),所以为了安全起见我们统一都可以设置为 31GB。 在 java 中,所有的对象都分配在堆上,然后
阅读全文
摘要:前言 搜索其实是一个很复杂的场景,且如何将搜索从 0 构建到 1 其实也蛮有挑战的,尤其要保证构建的整个闭环架构合理、服务稳定、性能高效,这是需要下功夫思考和实践才能想清楚的。 分层 数据源层 索引层 es 构建和调优 搜索业务层 搜索微服务架构 搜索必备配套服务 搜索体系监控和报警 详解 1、数据
阅读全文
摘要:1、分词源码升级一段时间后异常 主要特点:其中几个数据节点 CPU 负载飙升,线程池阻塞 线上升级完分词后,线下测试与压测都没有什么问题,统一大规模上线一段时间后频繁的出现数据节点所在的服务器节点 CPU 飚的非常高,查看日志只看到: java.lang.OutOfMemoryError: unab
阅读全文
摘要:背景 这里介绍的优化是基于 ik 分词源码的优化。首先,我们知道,ik 分词默认有两种分词模式,分别为:ik_max_word 和 ik_smart 这里针对这两种分词方式分别存在的问题有: ik_max_word :最细粒度分词方式 分的太细了,召回率确实很高,但是会导致召回的内容存在语义问题。例
阅读全文
摘要:1、避免深分页操作 es是一个搜索引擎,所以如果用这个搜索引擎对大量的数据进行搜索,并且返回搜索结果中排在最前面的少数结果,是非常合适的。 类似于后台下载功能,如果要做成类似数据库的东西,每次都进行大批量的查询,是很不合适的。如果真的要做大批量结果的查询,记得考虑用scroll api。 2、避免业
阅读全文
摘要:1、尽量少的字段 elasticsearch 的搜索引擎严重依赖于底层的 filesystem cache,你如果给 filesystem cache 更多的内存,尽量让内存可以容纳所有的 indx segment file 索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。 比如说,
阅读全文
摘要:1、使用 bulk 批量写入 你如果要往es里面灌入数据的话,那么根据你的业务场景来,如果你的业务场景可以支持让你将一批数据聚合起来,一次性写入es,那么就尽量采用bulk的方式,每次批量写个几千条这样子。 bulk批量写入的性能比你一条一条写入大量的 document 的性能要好很多。但是如果要知
阅读全文
摘要:【申明】这里启动 elasticsearch 用户名为:elastic 1、设置启动 elasticsearch 用户所持有的文件句柄数 vim /etc/security/limits.conf # 在文件末尾增加以下内容 elastic soft memlock unlimited elasti
阅读全文
摘要:没有多余的废话,直接上方案吧! 方案一: 最笨的方案即:for * for,对应的时间复杂度为:O(n*n) 每个搜索词命中的网页是非常多的,O(n*n) 的复杂度是明显不能接受的。倒排索引是在创建之初可以进行排序预处理,问题转化成两个有序的list求交集,就方便多了。 画外音:比较笨的方法。 方案
阅读全文
摘要:1、为什么需要倒排索引 倒排索引,也是索引。 索引,初衷都是为了快速检索到你要的数据。 每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不同的使用场景和数据结构,需要用不同的索引,才能起到最大化加快查询的目的。 对 Mysql 来说,是 B+ 树,对 Elastics
阅读全文
摘要:1. 插入数据 2. 搜索 3. 结果 理论上 2 的文档其实是我们需要的,但是搜索的结果不是。要理解原因,需要知道 bool 查询时如何计算得到其分值的: 文档1 在两个字段中都包含了 brown,因此两个 match 查询都匹配成功并拥有了一个分值。文档2 在 body 字段中包含了 brown
阅读全文
摘要:1. 数据均衡 某个shard分配到哪个节点上,一般来说,是由 ELasticSearch 自行决定的。以下几种情况会触发分配动作: 新索引的建立 索引的删除 新增副本分片 节点增减引发的数据均衡 在动态分配的时候有几个默认值需要注意,当然对应的这些默认值都是可以修改的,具体如下: 2. rerou
阅读全文
摘要:自定义动态映射 如果你想在运行时增加新的字段,你可能会启用动态映射。然而,有时候,动态映射 规则 可能不太智能。幸运的是,我们可以通过设置去自定义这些规则,以便更好的适用于你的数据。 日期检测 当 Elasticsearch 遇到一个新的字符串字段时,它会检测这个字段是否包含一个可识别的日期,比如
阅读全文
摘要:以下都是经过实战验证过的!!! 【前提】使用相同的版本 ElasticSearch-5.5.1,只不过是在不同的服务器之间且重跑数据相对来说代价比较高,这种情况下就可以使用一下这种方式对索引整体迁移 当然也支持 ElasticSearch 不同版本之间的迁移(这个没有亲测),以及从不同数据源同步等操
阅读全文
摘要:具体问题如下图所示: 将 INFO 信息打印大致如下所示: 首先,从日志上看到发现可能是 es 被写死了,即无法再写入更多的数据,既然这样,那么很自然的就会想到限流 logstash 数据的写入,配置logstash-5.4.1/config/logstash.yml修改: 降低 pipeline
阅读全文

浙公网安备 33010602011771号