目 录CONTENT

文章目录

ElasticSearch背后的故事

彭涛
2024-05-02 / 0 评论 / 0 点赞 / 4 阅读 / 3085 字

ElasticSearch

1.什么是ElasticSearch?

Es就是全文检索引擎

2.什么是全文检索?

1)数据的分类

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

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

2)结构化数据的查询

可以直接使用sql语句查询,查询速度快

3)非结构化数据的查询

例如:从磁盘文件中找出包含spring单词的文件

方案一:使用顺序扫描的方式,存在的问题:如果数据量十分庞大,耗时时间长

方案二:将非结构化数据转为结构化数据,然后建立索引。先将文章内容进行分词处理,得到一个基础的单词列表,去除标点符号,转换大小写,去除停用词(无意义词),并记录单词和文档的对应关系,得到一个最终的单词列表,然后基于单词列表创建一个索引,查询时直接查询索引找到到对应的单词,根据单词和文档的对应关系找到查询的文档列表

这个先创建索引然后在查询索引的过程叫全文检索

索引是一次创建可以多次使用,表现为每次查询速度非常快

索引就是一个独立的数据结构,相当于一本书的目录

3.全文检索的应用场景

1)搜索引擎

例如百度搜索,谷歌搜索等

2)电商搜索

商品搜索等

3)站内搜索

话题搜索,论坛搜索等

4)文件搜索

4.如何实现全文检索

可以使用Lucene实现全文检索,Lucene是基于java开发的全文检索的api,类似于jar包,在项目中推荐使用solr或者ElasticSearch都是基于Lucene的全文检索引擎(服务器)

5.全文检索的流程

1)创建索引
  1. 获得原始文档:原始文档就是我们要在哪些内容力量进行搜索,这个内容就是原始文档

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

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

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

2)查询索引

1.用户输入查询条件

2.根据用户输入的查询条件封装成Query对象:把用户输入的内容进行分词处理,得到一个单词列表,基于单词列表创建查询条件,要查询的内容,在那个filed上查询

3.基于query对象查询索引:根据关键字找到索引中对应的位置,根据关键词和文档的对应关系找到文档id列表,根据id找到对应的Document对象

4.展示结果:把document对象中的内容展示给用户

0

评论区