Lucene&Solr学习笔记之一
in with 0 comment

Lucene&Solr学习笔记之一

in with 0 comment

1.Lucene起步

1.1 lucene介绍

Lucene是一个全文检索引擎工具包,最初是apache软件基金会jakarta项目组的一个子项目,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,以及部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能例如站内搜索,或者是以此为基础建立起完整的全文检索引擎。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。

1.2 Lucen的功能

可扩展的高性能索引

强大,准确,高效的搜索算法

跨平台解决方案

Lucene文档地址:

http://lucene.apache.org/core/7_7_1/index.html

1.2 lucene全文检索的应用场景

对于数据量大,数据结果不固定的数据可采用全文检索方式搜索,比如百度、google等搜索引擎,电商网站站内搜索,论坛站内搜索等。

1.3 Lucen实现全文索引的流程

在这里插入图片描述 在这里插入图片描述 1.红色表示所有过程,对要搜索的原始内容进行索引,构建一个索引库,索引过程包括:

确定原始内容即要搜索的内容 --> 采集文档 --> 创建文档 --> 分析文档 --> 索引文档

2.橙色表示搜索过程,从索引库中搜索内容,搜索过程包括:

用户通过搜索界面 --> 创建查询 --> 执行搜索,从索引库查询 --> 渲染搜索结果

1.4 创建索引

1.4.1 获得原始文档

原始文档是指要索引和搜索的内容,原始内容包括互联网上的网页、数据库中的数据、磁盘上的文件等

本例中的原始内容就是磁盘上的文件,如下图所示: 在这里插入图片描述

1.5创建文档对象

​ 获取原始内容的目的是为了索引,在索引前需要将原始内容创建成文档(Document),文档中包括一个一个的域(Field),域中存储内容。 ​ 这里我们可以将磁盘上的一个文件当成一个 document,Document 中包括一些Field (filename 文件名称、fle_path 文件路径、flesize文件大小、file_content文件内容),如下图: 在这里插入图片描述 在Lucene中的域就相当于数据库中的字段,可以有多个域,且域名称可以相同,一个域由域名称,域值组成类似域K,V键值对。每一个文档都有一个唯一的编号就是文档的id,与数据库的id类似,但是无法手动指定,是Lucene自增的。

1.6 分析文档

​ 将原始内容创建为包含域(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。tem中包含两部分一部分是文档的域名,另一部分是单词的内容。例如:文件名中包含apache和文件内容中包含的apache是不同的 term。

1.7 创建索引

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

假设有文档A和文档B,文档A经过分词后包含spring,文档B经过分词后也包含spring,那么索引词spring会有一个count来计数,为了在搜索这个索引时能将count个文档返回,创建索引时就会多一个域来存储分词后对应的文档id。

注意:创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫倒排索引结构。传统方法是根据文件找到该文件的内容,在文件内容中匹配搜索关键字,这种方法是顺序扫描方法,数据量大、搜索慢。 倒排索引结构是根据内容(词语)找文档,如下图:

在这里插入图片描述 倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。

1.8查询索引

全文检索系统提供用户搜索的界面供用户提交搜索的关键字,搜索完成展示搜索结果。 在这里插入图片描述

1.9 创建查询

用户输入查询关键字执行搜索之前需要先构建一个查询对象,查询对象中可以指定查询要搜索的Field文档域、查询关键字等,查询对象会生成具体的查询语法,例如:语法fileName:lucene表示要搜索Field域的内容为lucene的文档。

1.10 执行查询

搜索索引过程: 根据查询语法在倒排索引词典表中分别找出对应搜索词的索引,从而找到索引所链接的文档链表。

1.11 渲染结果

在这里插入图片描述 Lucene 不提供制作用户搜索界面的功能,需要根据自的需求开发搜索界面。