强大搜索引擎背后的秘密——ElasticSearch基本概念解析

软件求生 2024-04-12 10:11:08

大家好,我是小米!今天我要和大家分享的是关于ElasticSearch的基本概念,特别是IK分词器、索引、映射以及文档等方面的知识。作为一名热爱技术、喜欢分享的小编,我希望通过这篇文章,能够帮助大家更好地了解ElasticSearch,提升大家在技术面试中的竞争力!

IK分词器

IK分词器是ElasticSearch中一种专门用于处理中文文本的分词器。它的作用是将输入的中文文本按照一定规则切分成一个个独立的词语,为后续的检索和分析提供支持。与传统的分词器相比,IK分词器更加智能和高效,能够根据中文语境进行词语切分,提高了搜索的准确性和效率。IK分词器的出现,为中文文本的全文检索提供了有力的工具和支持。

IK分词器3.0的特性

IK分词器3.0是在IK分词器的基础上进行了全面升级和优化,带来了许多新的特性和功能,让我们一起来了解一下吧!

IK分词器3.0采用了一种独特的“正向迭代最细粒度切分算法”,这种算法具有高效、准确的特点。它能够将文本快速、精准地切分成最小的词语单位,为后续的索引和检索提供了可靠的基础。同时,这种算法还具有较高的处理速度,达到了每秒60万字的高速处理能力,大大提升了系统的性能。

IK分词器3.0引入了多子处理器分析模式,通过同时处理多个子分词器,充分利用了多核处理器的性能优势,提高了分词器的并发处理能力。这种模式不仅提升了分词器的效率,还增强了系统的稳定性和可靠性。

IK分词器3.0支持个人词条的优化的词典存储,用户可以根据自身需求进行词典存储优化,避免了传统词典存储方式的内存浪费问题,提升了系统的内存利用率和性能表现。同时,更小的内存占用也为系统的部署和运行带来了便利。

IK分词器3.0还引入了针对Lucene全文检索优化的查询分析器IKQueryParser,通过采用歧义分析算法优化查询关键字的搜索,提高了检索的准确性和效率。这使得系统在面对复杂的检索需求时能够更加灵活和高效地处理,为用户提供更优质的搜索体验。

排列组合是IK分词器3.0的一个重要特性,它能够通过排列组合的方式,极大地提高Lucene检索的命中率。这意味着系统能够更加准确地匹配用户的检索关键词,从而提升搜索结果的质量和准确性,满足用户对于搜索结果的高要求。

IK分词器3.0还提供了ext_dict功能,用于存储个人词条等自定义词典。用户可以根据自身的业务需求,将自定义的词条加入到词典中,提高分词器对特定领域的适应性和准确性。

stop_dict是IK分词器3.0的一个停用词词典,用户可以在其中定义一些常见的停用词,如“的”、“是”等,用于过滤掉一些无关紧要的词语,提升检索的准确性和效率。

同义词词典是IK分词器3.0的另一个重要功能,用户可以在same_dict中定义一些同义词,如“手机”、“电话”等,帮助扩展检索范围,提升检索的全面性和准确性。

索引(类数据库)

在ElasticSearch中,索引类似于传统数据库中的数据库,它是用于存储和组织文档数据的逻辑集合。每个索引都包含了一系列的文档,每个文档都是一个JSON对象。索引在ElasticSearch中具有非常重要的作用,它决定了文档的存储方式、搜索效率以及数据的分片和副本等参数。

设置索引库:在创建索引时,我们可以设置一些参数,如分片数、副本数等,来优化索引的性能和可靠性。分片数决定了索引在存储和搜索时的并行性能,副本数则决定了数据的可靠性和容错能力。通过合理设置这些参数,可以充分发挥ElasticSearch的性能优势,提升系统的稳定性和可靠性。

定义索引库的分片数副本数等:在定义索引库时,我们还可以指定一些其他参数,如分片路由、数据节点、映射类型等,来进一步优化索引的性能和功能。分片路由可以根据文档的某个字段值进行数据的分片和存储,提高数据的分布均衡性和搜索效率;数据节点则决定了索引的数据存储位置,可以根据业务需求进行灵活配置;映射类型则用于定义文档的字段类型和分词器,影响了数据的搜索和分析效果。

映射(类表设计)

在ElasticSearch中,映射类似于传统数据库中的表设计,它定义了文档中各个字段的数据类型、分词器类型以及是否需要进行存储或者创建索引等信息。映射在ElasticSearch中扮演着非常重要的角色,直接影响了文档的存储结构、搜索效率以及数据的分析和可视化等功能。

字段的数据类型:在映射中,我们需要为每个字段指定合适的数据类型,包括字符串、整数、浮点数、日期等。合理选择字段的数据类型可以提高系统的存储效率和搜索性能,避免不必要的数据类型转换和存储空间浪费。

分词器类型:分词器类型用于指定文档中某个字段的分词器,不同的字段可以采用不同的分词器来满足不同的检索需求。常用的分词器类型包括标准分词器、IK分词器、Whitespace分词器等,用户可以根据实际需求选择合适的分词器类型。

是否要进行存储或者创造索引:在映射中,我们还可以指定某个字段是否需要进行存储或者创建索引。如果需要对某个字段进行全文检索或者聚合分析,则需要将其创建索引;如果某个字段只需要在文档中存储,而不需要进行搜索或者分析,则可以选择不创建索引,以节省存储空间。

其他映射属性:除了上述基本属性外,映射还可以定义一些其他属性,如字段的分析器、索引分片、数据节点路由等。通过合理设置这些属性,可以进一步优化映射的性能和功能,满足不同业务场景下的需求。

文档(数据)

在ElasticSearch中,文档是组成索引的基本单位,类似于传统数据库中的数据行。每个文档都是一个JSON格式的数据对象,包含了一条完整的记录信息。文档可以是结构化的数据,也可以是非结构化的数据,它们以键值对的形式存储在索引中。

全量更新用Put:当我们需要更新文档的全部字段时,可以使用全量更新(Put)的方式。通过发送一个包含完整文档信息的HTTP请求,ElasticSearch会将原有的文档替换为新的文档。这种更新方式适用于需要一次性更新全部字段的场景,可以保证文档的数据完整性和一致性。

局部更新用Post:相比之下,局部更新(Post)则是在原有文档的基础上进行部分字段的更新。通过发送一个包含待更新字段信息的HTTP请求,ElasticSearch会将指定字段更新为新的值,而保持其他字段的不变。这种更新方式适用于只需更新部分字段的场景,可以减少网络传输和系统资源的消耗,提高更新效率和性能。

文档的数据结构:文档的数据结构由其所属的索引的映射类型定义,包含了各个字段的数据类型、分词器类型等信息。在ElasticSearch中,文档的数据结构可以根据实际需求进行动态映射或者静态映射,灵活适应不同的数据模型和业务场景。

文档的唯一标识:每个文档在索引中都有一个唯一的标识符,称为文档ID。文档ID可以由ElasticSearch自动生成,也可以由用户指定,用于唯一标识和检索文档。在进行文档的增删改查操作时,需要指定文档的ID来确定操作对象。

END

通过本文的介绍,相信大家对ElasticSearch的基本概念有了更深入的了解。在面试中,对于这些基本概念的掌握将会为我们的技术面试增添不少优势。希望大家能够通过不断学习和实践,提升自己的技术水平,成为技术领域的佼佼者!感谢大家的阅读,我们下期再见!

0 阅读:95

软件求生

简介:从事软件开发,分享“技术”、“运营”、“产品”等。