es相关概念

1、什么是ElasticSearch?

ES就是全文检索引擎。

 

2、什么是全文检索

1)数据的分类

1、结构化数据: 数据类型固定、长度固定、格式固定。例如数据库中的数据。

2、非结构化数据: 数据类型不固定、长度不固定、格式不固定。

2)结构化数据的查询: 可以直接使用sql语句查询。查询速度很快。

3)非结构化数据的查询  例如:从磁盘文件中找出包含“spring”单词的文件。

方案1:使用顺序扫描的方式   存在的问题:如果数据量非常庞大,花费的时间非常长。

方案2:把非结构化数据变成结构化数据。然后建立索引。先把文章内容进行分词处理,得到一个基础的单词列表。去除标点符号、转换大小写、去除停用词,并记录单词和文档的对应关系。得到一个最终的单词列表。然后基于单词列表创建一个索引。查询时直接查询索引找到对应的单词,根据单词和文档的的对应关系找到查询的文档列表。这个先创建索引然后再查询索引的过程就叫做全文检索。

停用词:无意义的词   

索引是一次创建可以多次使用,表现为每次查询速度非常快。索引就是一个独立的数据结构,相当于一本书的目录。

 

3、全文检索的流程

1)创建索引:

 获得原始文档: 原始文档就是我们要在哪些内容中进行搜索,这个内容就是原始文档。文件搜索:磁盘上的文件  搜索引擎:整个互联网的网页  电商搜索:商品数据  微博搜索:微博数据.

创建Document对象:  每个原始文档对应一个Document对象,一个Document中包含多个field,field中包含了文档的属性信息。对应每个原始文档的属性创建一个Field,把属性保存到field中。例如:文件的属性有文件名、文件内容、文件的路径、文件大小等。 每个document都有一个唯一的id,可以用户指定也可以系统生成。field包含两部分内容:field的名称   field的内容. field包含三个特征:是否分词: 是否需要对field中的内容进行分词处理。是否索引: 分词之后一定要索引,不分词也可以创建索引。只要在field上有查询的需求就应该创建索引。是否存储: 是否要把field中的内容保存到磁盘。不影响查询。判断标准,是否要展示给用户看.

分析文档: 只针对需要分词的field进行分析处理。1对原始内容进行字符串拆分  2去除标点符号  3去除停用词  4转换大小写. 最终得到一个单词列表。对应每个关键词都封装成一个Term对象。term中包含两部分内容:1、关键词本身 2、关键词所在的field. 

例如:

name:spring name:java name:match

content:spring

不同的field中拆分出的同一个单词是不同的term。

基于第三步得到的单词列表,创建索引。并且保存到磁盘。索引库中包含三部分内容:1索引:单词列表  2文档对象:Document  3: 关键词和文档的对应关系

2)查询索引: 用户输入查询条件, 根据用户输入的查询条件封装成Query对象,  把用户输入的内容进行分词处理,得到一个单词列表, 基于单词列表创建查询条件。要查询的内容 以及 在哪个field上查询

例如:

在文件内容中包含java关键词

文件名中包含spring关键词

3、基于Query对象查询索引

根据关键词找到索引中对应的位置。

根据关键词和文档的对应关系找到文档id列表。

根据id找到对应的Document对象。

4、展示结果

把document对象中的内容展示给用户。

 

4、概念说明

   Relational DB -> Databases -> Tables -> Rows -> Columns

       Elasticsearch -> Indices   -> (Types)  -> Documents -> Fields

1 索引 index

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并

且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。

2 类型 type

在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客

平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。

3 文档 document

一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表

示,而JSON是一个到处存在的互联网数据交互格式。在一个index/type里面,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。

4 字段Field

相当于是数据表的字段,对文档数据根据不同属性进行的分类标识

5 映射 mapping: mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理es里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

 

posted @   小兵要进步  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)

侧边栏
点击右上角即可分享
微信分享提示