lucene 索引流程详细分析|学习笔记

简介: 快速学习 lucene 索引流程详细分析

开发者学堂课程【Lucene 知识精讲与实战(上)  lucene 索引流程详细分析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/700/detail/12328


lucene 索引流程详细分析


内容介绍:

一、课程回顾

二、索引流程分析

三、Lucene 底层存储结构

 

一、课程回顾

先来回忆一下这张图

image.png

索引流程:对文档索引的过程,将用户要搜索的文档内容进行索引,索引存储在索引库(index)中。

 

二、索引流程分析

1.获得原始数据内容

原始内容:原始内容是指要索引和搜索的内容,包括互联网上的网页、数据库中的数据、磁盘上的文件等。得看它的数据来源是在什么地方,下面我们会讲解在不同来源获得原始数据的方法。

2.获得文档(采集数据)

从互联网上、数据库、文件系统中等获取需要搜索的原始信息,这个过程就是信息采集,采集数据的目的是为了原始内容进行索引。

采集数据分类:

1)对于互联网上网页、可以使用工具将网页抓取到本地生成HTML文件;

2)数据库中的数据,可以直接连接到数据库读取表中的数据;

3)文件系统中的某个文件,可以通过 I/O 操作提取文件的内容。

在互联网上采集信息的软件通常成为爬虫或蜘蛛,也称为网络机器人,爬虫访问互联网上的每一个网页,将获取到的网页内容存储起来。

3.创建文档

获取原始文档内容的目的是为了索引,在索引前需要将原始内容创建成文档,文档中包括一个一个的域,域中存储内容。在这里可以将磁盘上的一个文件当成一个 document(文档),document 中包含一些 field(域)。很多个文档组成了一个文档集合,很多的域组成了一个文档,每个文档对应一篇文章或者数据表中的一条数据,如下图所示:

image.png

如果是数据表中的一条数据代表一个文档,在产生文档对象的时候 Lucene 会为他产生一个唯一的 ID,这个 ID 是这个文档的唯一标识,在文档当中又有很多的域,每个域当中会有属于它的数据,一个一个字段的,每个字段里有每个字段的内容,比如上图的 ID 为111的内容有id为1,name为vivo x23 8GB+128GB幻夜蓝 全网通4G手机,brandName 为 vivo。前面的id是域名,后面的是它的域值。ID 和 id 是不一样的,id指的是数据库当中的一个属性,ID 指的是 document 的 ID,是整个文档的唯一标识,我们控制不了这个,因为是 Lucene 给它自动分配的,但是可以控制得了 id。文档的内容创建完了之后需要把内容提取出来进行一个切分词,切分词之后来组建它的索引(目录)。

4.分析文档

将原始内容创建为包含域(field)的文档(document),需要再对域中的内容进行分析,分析成为一个个的单词。

举例切分词:

原文档的内容:

vivo x23 8GB+128GB 幻夜蓝 全网通4G手机

华为 HUAWEI 麦芒7 6G+64G 亮黑色 全网通4G手机

分析后得到的词:

vivo,x23,8GB,128GB,幻夜,幻夜蓝,全网,全网通,网通,4G,手机,华为,HUAWEI,麦芒7......重复的词和标点符号都会被过滤掉,切分完之后都会变成一个个索引。

5.索引文档

对所有文档分析得出的词汇单元进行索引,索引的目的是为了搜索,最终要实现只搜索被索引的语汇单元从而找到 document(文档)。

创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫做

倒排索引结构,倒排索引结构是根据内容(词汇)找文档,如下图:

image.png

这个索引前面放的是关键字,后面放的是文档号。我们只能根据关键字来分配关键字,因为文档编号我们是控制不了的,我们把关键字组成一个目录(索引)之后,后面的文档号是关键字的来源。要是两个文档都包含关键字,比如“手机”,这两个文档都有这个关键词,我们就把这两个文档的ID放到索引当中,图中的“222”排在“111”前面的原因是因为这个是倒排表,是从后面往前面的查的,关键词和文档编号是有关联关系的。查询“手机”关键字的时候就可以找到“222”和“111”这两篇文档,这个速度是很快的。如果不用这个方法,逐字逐字地查,如果数据量特别大,速度就会非常的慢。


三、Lucene 底层存储结构

image.png

这是一个完整的一个图,一条数据组成一个文档,所有数据组在一块的就叫做文档结合,在文档当中有域,里面的结构是 key value 的结构(域名+域值),把文档集合的值进行切分词得到左边手机状的关键字目录(index 索引),关键字和文档编号是有关联关系的,在查的时候通过关键词找到文档编号,通过文档编号找到具体的文档,也就是正文内容,速度非常快,这个索引是要提前建立的,这样速度才会更快。比如百度,它每天24小时不间断的进行索引建立(互联网关联),这样用户在查询的时候才能更快。但京东和淘宝这些商品类的是进行商品上架之后才形成的索引目录,用户再进行查询。

相关文章
|
3月前
|
消息中间件 监控 数据挖掘
Elasticsearch 使用误区之二——频繁更新文档
【8月更文挑战第15天】在大数据与搜索技术日益成熟的今天,Elasticsearch 作为一款分布式、RESTful 风格的搜索与数据分析引擎,凭借其强大的全文搜索能力和可扩展性,成为了众多企业和开发者的首选。然而,在使用 Elasticsearch 的过程中,一些常见的误区可能会导致性能下降或数据不一致等问题,其中“频繁更新文档”便是一个不容忽视的误区。本文将深入探讨这一误区的根源、影响及解决方案,帮助读者更好地利用 Elasticsearch。2
77 0
|
5月前
|
算法 索引
一篇文章讲明白Lucene学习总结之九:Lucene的查询对象(2)
一篇文章讲明白Lucene学习总结之九:Lucene的查询对象(2)
21 0
|
缓存 索引
白话Elasticsearch02- 结构化搜索之filter执行原理bitset机制与caching机制
白话Elasticsearch02- 结构化搜索之filter执行原理bitset机制与caching机制
96 0
|
存储 自然语言处理 搜索推荐
Elasticsearch 学习笔记(一)-----Lucene的简介以及索引原理
今天,正式开始学习Elasticsearch,因为Elasticsearch是用Lucene来实现索引的查询功能的,所以,理解Lucene的原理显的尤为重要。
571 0
Elasticsearch 学习笔记(一)-----Lucene的简介以及索引原理
|
自然语言处理 数据库 开发者
索引和搜索流程简介|学习笔记
快速学习索引和搜索流程简介
144 0
索引和搜索流程简介|学习笔记
|
自然语言处理 开发者 索引
搜索流程详细分析|学习笔记
快速学习搜索流程详细分析
118 0
搜索流程详细分析|学习笔记
|
存储 自然语言处理 关系型数据库
Lucene的查询过程
Lucene的查询过程
194 0
【转】lucene4 VSM的变动情况参考
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里
125 0
|
存储 自然语言处理 分布式计算
看Lucene源码必须知道的基本规则和算法
 下面介绍一些Lucene使用基本规则和算法。这些规则和算法的选择,都和Lucene和支持TB级的倒排索引有关。
|
存储 自然语言处理 数据库
Lucene 查询原理
# 前言 Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理,就需要深入lucene这一层,看看lucene是如何存储需要检索的数据,以及如何完成高效的数据检索。
8643 1