倒排索引&ES相关概念对比MYSQL ---> 学习自用

倒排索引 (Inverted Index): 是一种用于快速搜索和定位文本数据的数据结构, 它将文档中的每个单词作为索引的关键字, 然后记录每个单词在哪些文档中出现过, 因此, 倒排索引可以快速定位包含某个单词的文档, 用于支持全文搜索和相关性排序等功能

倒排索引的构建过程如下 :

  1. 分词 : 将文档拆分为单词, 对于不同语言和文本类型, 可以使用不同的分词器来进行分词
  2. 建立词条库 : 将所有单词作为关键字, 建立一个词条库, 记录每个单词在哪些文档中出现过
  3. 建立倒排索引 : 对于每个单词, 记录它出现的所有文档的编号, 建立一个倒排索引表, 倒排索引表通常使用哈希表或者跳表等数据结构来实现

倒排索引的查询过程如下 :

  1. 分词: 将查询拆分成单词, 使用相同的分词器进行分词
  2. 查询倒排索引 : 对于每个单词, 查询倒排索引表, 找到包含该单词的所有文档编号
  3. 合并结果 : 将包含所有单词的文档编号合并起来, 得到最终的查询结果

倒排索引的优点是可以快速的支持全文搜索和相关性排序等功能, 适用于海量文本数据的检索和分析, 不过倒排索引也存在一些缺点, 例如占用较大的存储空间、查询速率收到分词质量和查询条件的影响等
因此, 在实际使用中, 需要根据具体的需求来选择合适的索引方式和查询算法.


ES相关概念对比MYSQL
● 什么是Elasticsearch
Elasticsearch是基于Apache Lucene的搜索服务器,是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;主要用于全文检索、结构化搜索以及分析;Elasticsearch是一个实时的分布式开放源代码全文本搜索和分析引擎。可从RESTful Web服务界面访问它,并使用无模式的JSON(JavaScript对象表示法)文档存储数据。它基于Java编程语言构建,因此Elasticsearch可以在不同平台上运行。它使用户能够以很高的速度浏览大量的数据。

● 对比理解
ES既然是用来搜索的,那么它必然也需要存储数据。在Mysql等关系型数据库中,数据的存储遵循下面的逻辑:
一个数据库(database)中有多个表(tables),每个表有多行数据(rows),每一行数据由多个字段(columns)组成。

ES中的存储是这样的:
一个索引(indeces)相当于一个数据库(database),每个索引中有多个类型types(相当于表结构),每个索引中有多个documents(相当于行),每个documents由多个fields组成(相当于字段)。

可以把ES理解为他是一个面向文档的数据库。下面用一张图描述ES和关系型数据库之间的相似之处:

● 难理解之处
ES中的索引和Mysql中的索引不是同一种东西,ES中的索引是一个文档的集合,索引就是一个数据库。
前面说了ES是面向文档的,文档是ES中最重要的单位,文档就是一条条的数据。文档中有几个重要的概念:
1、一篇文档中包含多个key:value
2、文档其实就是一个JSON字符串

● 全文检索
全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程。
全文检索(Full-Text Retrieval)以文本作为检索对象,找出含有指定词汇的文本。全面、准确和快速是衡量全文检索系统的关键指标。
只处理文本、不处理语义、搜索时英文不区分大小写、结果列表有相关度排序。

posted @   NorthwardSummer  阅读(11)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示