Elasticsearch笔记(更新中)

28

安装

安装ES(linux)

下载地址:

安装完成后,访问9200端口,即可看到响应的Elasticsearch服务的基本信息

安装kibana(linux)

下载地址:

  1. 安装完成后,直接访问5601端口,即可看到控制台页面

  2. 选择Explore on my own之后,进入主页面

  3. 然后选中Dev tools,进入开发工具页面

语法:请求方式 请求路径

正向索引与倒排索引

elasticsearch之所以有如此高性能的搜索表现,正是得益于底层的倒排索引技术。

正向索引

id字段创建了索引,而索引底层是B+树,其他字段只在叶子节点上存在。

根据id精确匹配时,可以走索引,查询效率较高。

而当搜索条件为模糊匹配时,由于索引无法生效,导致从索引查询退化为全表扫描,效率很差。

比如 select xxx from xxx where xxx like '%开头的模糊查询%'

因此,正向索引适合于根据索引字段的精确搜索,不适合基于部分词条的模糊匹配。

而倒排索引恰好解决的就是根据部分词条模糊匹配的问题。

倒排索引

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息

  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:今天天气格外晴朗,阳光明媚。,就可以分为: [“今天”、“天气”、“格外”、“晴朗”、“,”、“阳光”、“明媚”、“。”] 这样的几个词条

倒排索引的创建流程

一、通过分词算法处理
  1. 目的:将文档内容按照语义拆分成一个个词条,以便后续处理。

  2. 方法:使用分词算法,如结巴分词、jieba分词等,对文档进行分词处理。这些算法能够识别文档中的单词、短语,并根据语义进行拆分。

  3. 示例

    • 原始文档:“今天天气格外晴朗,阳光明媚。”

    • 分词处理后:[“今天”、“天气”、“格外”、“晴朗”、“,”、“阳光”、“明媚”、“。”]

二、创建表
  1. 目的:记录每个词条及其在文档中的位置信息,为后续索引创建做准备。

  2. 结构:创建一个表格,每行数据包括词条、词条所在文档的ID、词条在文档中的位置(如字符偏移量)等信息。

词条

文档ID

位置

今天

1

0

天气

1

2

格外

1

4

晴朗

1

6

1

8

阳光

1

10

明媚

1

12

1

14

三、创建正向索引
  1. 目的:由于词条具有唯一性,可以为每个词条创建正向索引,以便于快速查找包含该词条的文档。

  2. 方法:根据分词处理后的词条列表,为每个词条分配一个唯一的索引值。这个索引值可以作为词典中的单词ID,用于倒排索引的构建。

词典(部分)

单词ID

单词

1

今天

2

天气

3

格外

4

晴朗

5

6

阳光

7

明媚

8

正向索引示例(部分)

单词ID

文档ID

位置

1

1

0

2

1

2

3

1

4

4

1

6

5

1

8

6

1

10

7

1

12

8

1

14

正向索引与倒排索引的区别

  • 正向索引是最传统的,根据id索引的方式。

    但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程