随笔分类 -  搜索引擎

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