![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Elasticsearch
文章平均质量分 81
@Autowire
这个作者很懒,什么都没留下…
展开
-
Elasticsearch近实时架构
在Lucene中,索引是由多个分段(segment)组成的,每个分段都是一个独立的数据集,保存了文档的倒排索引等信息。需要注意的是,虽然每个Lucene索引和每个Elasticsearch分片在内部结构上相似,但它们在实际使用和管理上存在一定的差异。在创建索引时,可以指定主分片的数量和副本分片的数量。在Elasticsearch中,索引是由多个分片(shard)组成的,每个分片都可以在多个节点上分布存储和搜索。主分片承载了索引数据的主要部分,而副本分片则是主分片的副本,用于提高搜索和数据存储的可靠性。原创 2023-09-11 16:16:31 · 415 阅读 · 2 评论 -
2023-09-12 - 7 搜索排序
现在我们来思考一下上述match查询的打分细节,在默认情况下,文档的boost为BM25中的k1+1,因为在默认情况下k1=1.2,所以boost=k1+1=1.2+1=2.2。title字段使用标准分析器,设置“金都”这个match查询的boost值为2后,在查询时“金都”被切分成“金”“都”,这两个切分的字在BM25查询中的最终boost值都为4.4。例如,可以为查询A设定boost值为3,为查询B设定boost值为6,则在进行相关性计算时,查询B的权重将比查询A相对更高一些。原创 2023-09-12 09:51:15 · 347 阅读 · 0 评论 -
2023-02-10 - 6 聚合
当用户使用搜索引擎完成搜索后,在展示结果中需要进行进一步的筛选,而筛选的维度需要根据当前的搜索结果进行汇总,这就用到了聚合技术。聚合的需求在很多应用程序中都有所体现,例如在京东App中搜索“咸鸭蛋”,然后单击搜索界面中的“筛选”按钮,在弹出的界面中可以对当前的搜索结果进行进一步的过滤。例如,可以从价格区间、品牌、分类、枚数等维度分别进行筛选,如图7.1所示。ES支持丰富的聚合操作,不仅可以使用聚合功能对文档进行计数,还可以计算文档字段的平均值、最大值和最小值等。原创 2023-02-11 15:44:02 · 513 阅读 · 0 评论 -
2023-02-10 - 5 文本搜索
作为一款搜索引擎框架,文本搜索是其核心功能。ES在文本索引的建立和搜索过程中依赖两大组件,即Lucene和分析器。其中,Lucene负责进行倒排索引的物理构建分析器负责在建立倒排索引前和搜索前对文本进行分词和语法处理。本节将文本的搜索功能拆分成索引建立过程和搜索过程分别进行介绍。5.1节提到,ES在文本字段的索引建立和搜索阶段都会用到分析器。那么,分析器的主要作用是什么?它是由哪几部分构成的?各部分的作用又是什么呢?本节将对这些疑问进行解答。创建或更新文档时(合称索引时),对相应的文本字段进行分词处理;原创 2023-02-11 13:04:15 · 922 阅读 · 0 评论 -
2023-02-10 - 4 丰富的搜索功能
ES为用户提供了丰富的搜索功能:既有基本的搜索功能,又有搜索建议功能;既有常用的普通类型的匹配功能,又有基于地理位置的搜索功能;既提供了分页搜索功能,又提供了搜索的调试分析功能。原创 2023-02-10 16:50:05 · 722 阅读 · 0 评论 -
2023-02-09 - 3 Elasticsearch基础操作
其实,在前面的章节中我们已经用到了ES的动态映射机制。在介绍数组类型和对象类型时提到,这两种类型都不需要用户提前定义,ES将根据写入的数据自动创建mapping中对应的字段并指定类型。对于基本类型,如果字段没有定义,ES在将数据存储到索引时会进行自动映射,如表3.1所示为自动映射时的JSON类型和索引数据类型的对应关系。在一般情况下,如果使用基本类型数据,最好先把数据类型定义好,因为ES的动态映射生成的字段类型可能会与用户的预期有差别。原创 2023-02-10 12:53:51 · 524 阅读 · 0 评论 -
2023-02-09 - 3 Java客户端的使用
Spring Data Elasticsearch是Spring Boot套件中的一个组件,在Spring Boot中连接ES可以使用Spring Data Elasticsearch。Spring Data Elasticsearch是Spring Data项目的一部分,该项目致力于提供一致的基于Spring的数据查询和存储编程模型。Spring Data Elasticsearch封装了创建客户端的逻辑并与服务端保持长连接,让我们不必关注于网络连接问题。原创 2023-02-09 17:07:30 · 486 阅读 · 0 评论 -
2023-02-09 - 2 Elasticsearch搜索入门
完成搜索的第一步是建立搜索数据集的对象,即建立索引。因为只需要进行文本是否相等的判断,所以需要用到term搜索,在后面的章节中将会详细介绍term搜索,此处只进行简单使用。从上面显示的结果中可以看出搜索的一些元数据,如是否找到、索引名称、文档ID值、文档版本等,在_source中展示了命中的文档的原始数据,这和1.5.2节写入的数据是相同的。由上面的结果可以看出,ES不仅返回了搜索的文档结果,而且对结果进行了打分计算,因为本例使用的是比较简单的搜索,并没有使用其核心的计算公式,所以得分是1。原创 2023-02-09 14:51:39 · 402 阅读 · 0 评论 -
2023-02-09 - 1 Elasticsearch简介
搜索时,前端应用先向搜索模块发起搜索请求,然后搜索模块组织搜索DSL向ES发起请求,ES响应搜索模块的请求开始搜索,并将搜索到的商品信息(如名称、价格、地理位置等)进行封装,然后把数据传送给搜索模块,进而数据再由搜索模块传递到前端进行展现,如图1.10所示。当ES协调节点接收到来自客户端的获取某个索引的某文档的请求时,协调节点会找到该文档所在的所有分片,然后根据轮询算法在主/副分片中选择一个分片并将请求转发给该分片所在的节点,该节点会将目标数据发送给协调节点,协调节点再将数据返回给客户端。原创 2023-02-09 14:33:08 · 562 阅读 · 0 评论 -
2023-02-09 Elasticsearch 模糊搜索
看到这里也就明白了,使用ngram对每个分词后的词项创建索引,需要的磁盘空间相当巨大,带来的好处就是做模糊查询的时候可以极大的缩短搜索时间。值得注意的是,max_expansions是分片级别的,也就是说即使将max_expansions设置为1,在每个分片中只匹配一个词项,如果有10个分片,就会在10个分片中分别都匹配一个,也就是一共匹配了10个,所以不等于说max_expansions设置为1,返回的结果就一定只有1个。简单理解为,max_expansions设置的越小,返回的结果越少,性能越好;原创 2023-02-09 12:38:26 · 495 阅读 · 0 评论 -
2023-02-09 Elasticsearch 索引的批量操作
这是一句最简单的批量查询的语句,使用ES官方提供的_mget进行批量查询。但是这个查询其实真的很糟糕,稍微复杂一点的需求就会包含大量重复的条件在里面。也可以通过"_source": {“include”:[]}和"_source": {“exclude”:[]}指定需要和不需要的字段。要注意,_bulk的格式不像传统的那样那么多空格,而是必须采用这种规定的格式,写成传统的格式就会报错,一定要格式化成规定的格式才可以。通过"_source": [“field”, “field”]指定需要的字段。原创 2023-02-09 09:46:59 · 255 阅读 · 0 评论 -
2023-02-06 Elasticsearch 聚合查询相关
对分词的field,直接执行聚合操作,会报错,大概意思是说,你必须要打开fielddata,然后将正排索引数据加载到内存中,才可以对分词的field执行聚合操作,而且会消耗很大的内存。管道聚合其实就是基于聚合结果的聚合,那么基于查询结果的聚合其实和管道聚合本质上一样的,先将需要查询的数据查询出来,再将查询的结果进行进一步的聚合运算。对聚合的结果再进行聚合,比如统计平均价格最低的商品分类,就得先按分类聚合,再按平均价格聚合,再按价格的高低聚合。统计每个商品类型中,不同等级分类商品中,平均价格最低的等级。原创 2023-02-09 08:43:34 · 276 阅读 · 0 评论 -
2023-02-06 Elasticsearch 分词器相关
分词器是es中的一个组件,通俗意义上理解,就是将一段文本按照一定的逻辑,分析成多个词语,同时对这些词语进行常规化的一种工具;ES会将text格式的字段按照分词器进行分词,并编排成倒排索引,正是因为如此,es的查询才如此之快;原创 2023-02-06 17:03:56 · 490 阅读 · 0 评论 -
2023-02-06 Elasticsearch 查询相关
minimum_should_match:参数指定should返回的文档必须匹配的查询的子句的数量或百分比,如果bool query包含至少一个should查询,而没有must或filter子句,则默认值为1,否则为0。match_phrase会将检索关键词分词,match_phrase的分词结果必须在被检索字段的分词中都包含,且顺序必须相同,而且默认必须都是连续的,term搜索不会将搜索词分词。filter:不计算相关度得分,cache查询必须出现在匹配的文档中,但是不像must查询的分数将会被忽略。原创 2023-02-06 15:19:30 · 389 阅读 · 0 评论 -
2023-02-06 Elasticsearch Mapping 映射
text 类型适用于需要被全文检索的字段,例如新闻正文、邮件内容等比较长的文字,text 类型会被 Lucene 分词器(Analyzer)处理为一个个词项,并使用 Lucene 倒排索引存储,text 字段不能被用于排序,如果需要使用该类型的字段只需要在定义映射时指定 JSON 中对应字段的 type 为 text。2)false -新检测到的字段将被忽略,这些字段不会被索引,因此将无法被搜索,但仍会出现在_source返回的匹配项中。概念:映射是定义文档及其包含的字段的存储和索引方式的过程。原创 2023-02-06 10:49:58 · 378 阅读 · 0 评论 -
2023-02-05 Elasticsearch CRUD
ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。这里 Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个type, Elasticsearch 7.X 中, Type 的概念已经被删除了。原创 2023-02-05 21:16:59 · 77 阅读 · 0 评论 -
2023-02-05 Elasticsearch 集群 节点 分片
对于jdk的理解:http://localhost:9201/1 节点的理解每个节点就是一个Elasticsearch的实例一个节点≠一台服务器节点角色master 候选节点,并不是主节点,是在master宕机的时候,作为候选主节点data 数据节点data_content 数据内容节点data_hot 热节点 经常被访问data_warm 索引不再定期更新,但仍可查询data_code 冷节点,只读索引Ingest 预处理节点,作用类似于Logstash中的Filterm原创 2023-02-05 20:43:08 · 434 阅读 · 0 评论 -
2023-02-04 Elasticsearch 倒排索引的理解 && Trie前缀树原理
其中一个状态被标记为开始状态,0个或更多的状态被标记为final状态。全文检索:索引系统通过扫描文章中的每一 个词,对其创建索引,指明在文章中出现的次数和位置,当用户查询时,索引系统过就会根据事先创建的索引进行查找,并将查找的结果反馈给用户的检索方式。前缀树的每个节点代表一个字符,通常用一个属性 isEnd 来标注字符串的末尾,从根节点到 isEnd 为 true 的节点的路径便是一个字符串。前缀树的一个重要的特性是,结点所有的后代都与该结点相关的字符串有着共同的前缀,这是前缀树名称的由来。原创 2023-02-05 19:41:24 · 555 阅读 · 0 评论 -
2023-02-04 Elasticsearch环境安装
启动:双击 D:\Elasticsearch\elasticsearch-7.8.0\bin\elasticsearch.bat;http://localhost:9200/ 出现一下就成功。Yellow: 至少一个Replica不可用,但是所有Primary均为active,数据仍然是可以保证完整性的。启动方式 - 双击 D:\Elasticsearch\kibana-7.8.0\bin\kibana.bat。5. 验证:http://localhost:9100/安装成功。原创 2023-02-04 09:46:59 · 570 阅读 · 0 评论