Lucene实现全文检索的流程(入门)

    技术2023-09-29  79

    Lucene实现全文检索的流程(入门)

    1.创建索引

    1.创建原始文档

    原始文档:要基于哪些数据来进行检索

    搜索引擎:使用爬虫获得原始文档

    站内搜索:数据库中的数据

    2.构建文档对象

    对应每个原始文档创建一个document对象

    每个document对象中包含多个域

    域中保存的就是原始文档的数据:域的名称和域的值

    每个文档都有一个唯一的id

    3.分析文档

    分词的过程:

    ​ 1.根据空格进行字符串拆分,得到一个单词列表

    ​ 2.把单词统一转化为小写

    ​ 3.去除标点符号

    ​ 4.去除停用词(无意义的词)

    每个关键词封装成一个term对象:

    ​ 1.关键词所在的域

    ​ 2.关键词本身

    Ps:不同的域中拆分出来的相同的关键词是不同的term

    4.创建索引

    基于关键词列表创建一个索引,保存到索引库中。

    索引库中:索引,document,关键词和文档的对应关系

    2.查询索引

    1.用户查询接口

    用户输入查询条件的位置

    2.把关键词封装成一个查询对象

    要查询的域

    要查询的关键词

    3.执行查询

    根据要查询的关键词到对应的域上进行搜索

    找到关键词,根据关键词找到对应的文档

    4.渲染结果

    根据文档的id找到文档对象

    对关键词进行高亮显示

    分页处理

    最终展示给用户看

    入门程序

    1.创建检索

    环境:下载lucenehttps://lucene.apache.org/core/downloads.html

    最低要求jdk1.8

    工程搭建:

    ​ 创建一个工程

    ​ 添加jar包:

    ​ lucene-analyzers-common-7.7.3.jar

    ​ lucene-core-7.7.3.jar

    ​ commons-io.jar

    步骤:

    ​ 1.创建一个Director对象,指定索引库的位置

    ​ 2.基于Directory对象创建一个IndexWriter对象

    ​ 3.读取磁盘上的文件,对应每个文件创建一个文档对象

    ​ 4.向文档对象中添加域

    ​ 5.把文档对象写入索引库

    ​ 6.关闭indexwriter对象

    2.使用luke查看索引库中的内容

    3.查询索引库

    步骤:

    1.创建一个Directory对象,指定索引库的位置

    2.创建一个IndexReader对象

    3.创建一个IndexSearcher对象,构造方法中的参数indexReader对象

    4.创建一个Query对象,TermQuery

    5.执行查询得到一个TopDocs对象

    6.取查询结果总记录数

    7.取文档列表

    8.打印文档中的内容

    9.关闭IndexReader对象

    分析器

    默认使用的是标准分析器StandarAnalyser

    1.查看分析器的分析效果

    使用Analyzer对象的tokenStream方法返回一个TokenStream对象,词对象包含了最终分词结果

    实现步骤:

    ​ 1.创建一个Analyzer对象,StandarAnalyzer对象

    ​ 2.使用分析器对象的tokenStream方法获得一个TokenStream对象

    ​ 3.向TokenStream对象中设置一个引用,相当于是一个指针

    ​ 4.调用TokenStream对象的rest方法,如果不屌用抛异常

    ​ 5.使用while循环遍历TokenStream对象

    ​ 6.关闭TokenStream对象

    2.IKAnalyzer的使用方法

    1.把IKAnalyzer的jar包添加到工程中

    2.把配置文件和扩展词典添加到工程的classpath下

    注意:扩展词典严禁使用windows记事本编辑,以保护扩展词典的编码格式是UTF-8

    扩展词典:添加一些新词

    停用词词典:无意义的词或者是敏感词汇

    索引库的维护

    1.添加文档

    2.删除文档

    1.删除全部

    2.根据关键词删除文档

    3.修改文档

    修改的原理是先删除后添加

    索引库的查询

    1.使用Query的子类

    1.TermQuery

    根据关键词进行查询

    需要指定要查询的域及要查询的关键词

    2.RangeQuery

    范围查询

    2.使用QueryParse进行查询

    可以对要查询的内容先进行分词,然后基于分词的结果进行查询

    添加一个jar包:Lucent-queryparser-7.4.0.jar

    代码详情见以下链接: Lucene入门程序

    Processed: 0.010, SQL: 9