ElasticSearch学习笔记

本文深入探讨Lucene的全⽂检索流程,从创建索引到查询,详细讲解分词器原理,包括英⽂与中⽂分词。接着介绍Elasticsearch,对比Lucene和Solr,强调其分布式、多租户支持、高可用性和友好的RESTful API。文章最后讨论了SpringBoot如何整合Elasticsearch。
摘要由CSDN通过智能技术生成

目录

1、Lucene简介

1.1、Lucene介绍

1.2、Lucene全⽂检索流程

1.2.1、创建索引

1.2.2、查询索引 

1.3、分词器

1.3.1、分词器的作⽤

1.3.2、英⽂分词器的原理

1.3.2 中⽂分词器的原理

1.3.3、停⽤词的规

1.3.4、常⽤分词器

1.3.5、IK 分词器

1.4、lucene全⽂检索与数据库查询的⽐较

1.4.1、性能上

1.4.2、相关度排序

1.4.3、准确性

2、ElasticSearch简介

2.1、ElasticSearch vs Lucene的关系

2.2、ElasticSearch与Solr对⽐

2.3、Elasticsearch特性

2.3.1、安装管理⽅便

2.3.2、⼤规模分布式

2.3.3、多租户⽀持

2.3.4、⾼可⽤性

2.3.5、操作持久化

2.3.6、友好的RESTful API

3、Elasticsearch逻辑结构

3.1、索引(index)

3.2、类型(type)

3.3、⽂档(documents)

3.4、字段(fields)

3.5、节点与集群

4、ES基本操作

4.1、ES是基于RESTful实现访问

4.2、基本操作

4.3、数据类型

4.4、复杂查询-数据搜索

4.3.2、复杂查询语法

4.3.3、term和terms

⽤于对keyword字段进⾏精确匹配

4.4.4、match查询(重点)

4.4.5、根据id查询

4.4.6、其他查询

4.5、复合查询—bool

4.6、结果过滤—filter

4.7、⾼亮显示(重点)

5、SpringBoot整合ES

5.1、创建SpringBoot应⽤

5.2、添加es的依赖

5.3、配置Bean

5.4、使⽤案例


1、Lucene简介

1.1、Lucene介绍

Lucene是Apache Jakarta家族中的一个开源项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎,索引引擎和部分文本分析引擎。

Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在java开发环境里
Lucene是一个成熟的免费开源工具,是目前最为流行的基于java开源全文检索工具包。

  • 数据总体分为两种:
        结构化数据:指具有固定格式或有限⻓度的数据,如数据库、元数据等

⾮结构化数据:指不定⻓或⽆固定格式的数据,如邮件、word⽂档等磁盘上的⽂件

  • 对于结构化数据的全⽂搜索很简单,因为数据都是有固定格式的,例如搜索数据库中数
    据使⽤ SQL 语句即可
    • 对于⾮结构化数据,有以下两种⽅法:顺序扫描法(Serial Scanning)、全⽂检索 (Full-text Search)
      顺序扫描法 :如果要找包含某⼀特定内容的⽂件,对于每⼀个⽂档,从头到尾扫描内容,如
      果此⽂档包含此字符串, 则此⽂档为我们要找的⽂件,接着看下⼀个⽂件,直到扫描完所有
      的⽂件,因此速度很慢。
      全⽂检索 :将⾮结构化数据中的⼀部分信息提取出来,重新组织,使其变得具有⼀定结构,
      然后对此有⼀定结构的数 据进⾏搜索,从⽽达到搜索相对较快的⽬的。这部分从⾮结构化数
      据中提取出的然后重新组织的信息,我们称之索引。

      1.2、Lucene全⽂检索流程

      • 创建索引过程,对要搜索的原始内容进⾏索引构建⼀个索引库。索引过程包括:确定原
        始内容即要搜索的内容 采集⽂档 创建⽂档 分析⽂档 索引⽂档。
      • 搜索索引过程,从索引库中搜索内容。搜索过程包括:⽤户通过搜索界⾯ 创建查询
        执⾏搜索,从索引库搜索 渲染搜索结果。

      1.2.1、创建索引

          对⽂档索引的过程,将⽤户要搜索的⽂档内容进⾏索引,索引存储在索引库( index )中。
      这⾥我们要搜索的⽂档是 磁盘上的⽂本⽂件,根据案例描述:凡是⽂件名或⽂件内容包括关
      键字的⽂件都要找出来,这⾥要对⽂件名和⽂件内 容创建索引。
      • 获得原始⽂档:
        原始⽂档是指要索引和搜索的内容。原始内容包括互联⽹上的⽹⻚、数据库中的数据、
        磁盘上的⽂件等。
      • 创建⽂档对象:
        获取原始内容的⽬的是为了索引,在索引前需要将原始内容创建成⽂档( Document ),
        ⽂档中包括⼀个⼀个的域 ( Field ),域中存储内容。 这⾥我们可以将磁盘上的⼀个⽂件
        当成⼀个 document Document 中包括⼀些 Field (file_name ⽂件名称、 fi le_path ⽂件
        路径、 fi le_size ⽂件⼤⼩、 fi le_content ⽂件内容),如下图:

        注意: 

      •  每个Document可以有多个Field,不同的Document可以有不同的Field

      •  每个⽂档都有⼀个唯⼀的编号,就是⽂档 id
      • 分析⽂档:
        将原始内容创建为包含域( Field )的⽂档( document ),需要再对域中的内容进⾏分
        析,分析的过程是经过对原始⽂档提取单词、将字⺟转为⼩写、去除标点符号、去除停
        ⽤词等过程⽣成最终的语汇单元,可以将语汇单元理解为⼀ 个⼀个的单词。 ⽐如下边的
        ⽂档经过分析如下   
               原⽂档内容:
       
      Lucene is a Java full-text search engine. Lucene is not a complete
      application, but rather a code library and API that can easily be
      used to add search capabilities to applications.
      分析后得到的语汇单元:
      lucene java full search engine...
      每个单词叫做⼀个 Term ,不同的域中拆分出来的相同的单词是不同的 term term 中包
      含两部分⼀部分是⽂档的域名,另⼀部分是单词的内容。 例如:⽂件名中包含 apache
      ⽂件内容中包含的 apache 是不同的 term
      • 创建索引—倒排索引:
        对所有⽂档分析得出的语汇单元进⾏索引,索引的⽬的是为了搜索,最终要实现只搜索
        被索引的语汇单元从⽽找到 Document (⽂档)
      注意:创建索引是对语汇单元索引,通过词语找⽂档,这种索引的结构叫倒排索引结
      构。 传统⽅法是根据⽂件找到 该⽂件的内容,在⽂件内容中匹配搜索关键字,这种⽅法
      是顺序扫描⽅法,数据量⼤、搜索慢。 倒排索引结构是根 据内容(词语)找⽂档,如下
      图:
      倒排索引结构也叫反向索引结构,包括索引和⽂档两部分,索引即词汇表,它的规模较
      ⼩,⽽⽂档集合较⼤。

      1.2.2、查询索引 

      查询索引也是搜索的过程。搜索就是⽤户输⼊关键字,从索引( index )中进⾏搜索的过程。
      根据关键字搜索索引, 根据索引找到对应的⽂档,从⽽找到要搜索的内容(这⾥指磁盘上的
      ⽂件)。
      • ⽤户查询接⼝:  
        全⽂检索系统提供⽤户搜索的界⾯供⽤户提交搜索的关键字,搜索完成展示搜索结果。
        Lucene 不提供制作⽤户搜索界⾯的功能,需要根据⾃⼰的需求开发搜索界⾯
        创建查询:
        ⽤户输⼊查询关键字执⾏搜索之前需要先构建⼀个查询对象,查询对象中可以指定查询
        要搜索的 Field ⽂档域、查询关键字等,查询对象会⽣成具体的查询语法,例如: 语法
        fifi leName:lucene” 表示要搜索 Field 域的内容为 “lucene” 的⽂档
        执⾏查询:
        搜索索引过程: 根据查询语法在倒排索引词典表中分别找出对应搜索词的索引,从⽽找
        到索引所链接的⽂档链表。 ⽐如搜索语法为 fifi leName:lucene” 表示搜索出 fifi leName 域中
        包含 Lucene 的⽂档。 搜索过程就是在索引上查找域为 fifi leName ,并且关键字为 Lucene
        term ,并根据 term 找到⽂档 id 列表。
        渲染查询结果
        以⼀个友好的界⾯将查询结果展示给⽤户,⽤户根据搜索结果找⾃⼰想要的信息,为了
        帮助⽤户很快找到⾃⼰的结 果,提供了很多展示的效果,⽐如搜索结果中将关键字⾼亮
        显示,百度提供的快照等。

        1.3、分词器

        1.3.1、分词器的作⽤

        a. 在创建索引的时候需要⽤到分词器,在使⽤字符串搜索的时候也会⽤到分词器,并且这两个地⽅要使⽤同⼀个 分词器,否则可能会搜索不出来结果。
        b. 分词器 (Analyzer) 的作⽤是把⼀段⽂本中的词按规则取出所包含的所有词,对应的是
        Analyzer 类,这是⼀个抽 象类 (public abstract class org.apache.lucene.analysis.Analyzer),切分词的具体规则是由⼦类实现的,所以对于不 同的语⾔规则,要有不同的分词器。

        1.3.2、英⽂分词器的原理

      • a. 英⽂的处理流程为:输⼊⽂本,词汇切分,词汇过滤 ( 去除停⽤词 ) ,词⼲提取 ( 形态还原 )
        ⼤写转⼩写,结果输 出。
        b. 何为形态还原,意思是:去除单词词尾的形态变化,将其还原为词的原形,这样做可以搜
        索出更多有意义的结 果,⽐如在搜索 student 的时候,同事也可以搜索出 students 的结果。
        c. 任何⼀个分词法对英⽂的⽀持都是还可以的。

      1.3.2 中⽂分词器的原理

      中⽂分词⽐较复杂,并没有英⽂分词那么简单,这主要是因为中⽂的词与词之间并不是像英
      ⽂那样⽤空格来隔 开,因为不是⼀个字就是⼀个词,⽽且⼀个词在另外⼀个地⽅就可能不是
      ⼀个词,如: " 我们是中国⼈ " " 是中 " 就不是⼀ 个词,对于中⽂分词,通常有三种⽅式:单
      字分词、⼆分法分词、词典分词。
      • 单字分词:就是按照中⽂⼀个字⼀个字的进⾏分词,⽐如 :" 我们是中国⼈ " ,分词的效果
        就是 " " " " " " "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值