Lucene的入门精简总结

学一样东西之前肯定要明白它的设计原理和风格。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

搜索引擎与数据库搜索的主要区别:可以将要搜索的key拆分,并且在大量数据情况下搜索得很快。
搜索引擎主要分为两种:垂直搜索(只针对某一类),综合搜索。
核心技术:倒排索引
把key和该key出现的文档Id总结到一起,按照次数倒序排列。
用户有查询需求时,先访问倒排索引数据区域,得出文档id后,通过文档id即可快速,准确的找到具体的文档内容。这一过程,可以通过我们自己写程序来实现,也可以借用已经抽象出来的通用开源技术来实现。​
全文检索和搜寻的开源程序库Lucene
Lucene提供了一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具Lucene并不是现成的搜索引擎产品,但可以用来制作搜索引擎产品
Lucene全文检索
对文档的全部内容分词,然后对单词建立倒排索引的过程(位置和次数)。
Lucene、Solr、Elasticsearch关系
Lucene是底层工具包,其他两个是基于它的搜索引擎产品、​​
Lucene的基本使用
使用Lucene的API来实现对索引的增(创建索引)、删(删除索引)、改(修改索引)、查(搜索数据)。
Lucene添加依赖
单元测试 junit核心库lucene-core分词器lucene-analyzers-common查询解析器lucene-queryparser高亮显示lucene-highlighter​​​​
代码实现步骤
创建文档对象和存储目录
创建分词器
创建索引写入器的配置对象(需要版本和分词器)
创建索引写入器对象(需要配置对象,和索引目录(存储目录))
对文档 使用索引写入器
提交
关闭
字段类的不同特性:
TextField既创建索引,又会被分词
StringField会创建索引,但是不会被分词
StoreField一定会被存储,但是一定不创建索引
几个问题
什么样字段需要存储?需要显示在查询结果中的
什么样字段需要索引?根据这个字段会进行搜索的
什么昂字段需要分词?前提是这个字段先要创建索引,然后如果这个字段的值是不可分割的,那么就不需要分词
举例理解
我们那文章表为例.articleinfo.有ID,title(标题),sumary(摘要),content(内容),userName(用户名)其中title(标题),sumary(摘要)属于第一种情况,既要索引也要分词,也要存储.content(内容)要分词,索引,但不存储.由于他太大了,而且界面也不用显示整个内容.ID要存储,不用索引.因为没人用他来查询.但拼URL却很需要他.索引要存储.userName(用户名)索引,但不分词.可用保存.为什么不分词?比如"成吉思汗",我不想被"成汉"搜索到.我希望要么"成吉思汗"或者"吉思"通配符搜到.
目录类
FSDirectory:文件系统目录,会把索引库指向本地磁盘。
RAMDirectory:内存目录,会把索引库保存在内存。
分词器类
提供分词算法,可以把文档中的数据按照算法分词
这些分词器,并没有合适的中文分词器,因此一般我们会用第三方提供的分词器
索引写出器配置类(IndexWriterConfig)
设置配置信息:Lucene的版本和分词器类型
设置是否清空索引库中的数据(可以理解成怎样的追加方式,覆盖还是非覆盖)
可以一次创建一个,也可以批量创建索引
查询索引数据
创建要读取的目录对象
创建索引读取工具
创建索引搜索工具
创建查询解析器
创建查询对象
搜索数据
各种操作
查询的核心API
QueryParser(查询解析器)
两个参数:默认要查询的字段的名称,分词器
MultiFieldQueryParser(多字段的查询解析器)
Query(查询对象,包含要查询的关键词信息)
通过QueryParser解析关键字,得到查询对象
也可自定义查询对象,实现高级查询
IndexSearch(索引搜索对象,执行搜索功能)
IndexSearch可以帮助我们实现:快速搜索、排序、打分等功能。
IndexSearch需要依赖IndexReader类
查询后得到的结果,就是打分排序后的前N名结果。N可以通过第2个参数来指定:
TopDocs(查询结果对象)
int totalHits :查询到的总条数
ScoreDoc[] scoreDocs : 得分文档对象的数组
ScoreDoc(得分文档对象)
int doc :文档的编号
float score :文档的得分信息
特殊查询
词条查询(词条是最小搜索单位,且值必须是字符串)
通配符查询
? 可以代表任意一个字符
* 可以任意多个任意字符
模糊查询
允许用户输入错误,但是错误的最大编辑距离不超过2
数值范围查询
可用来对非String类型的ID进行精确的查找
布尔查询
布尔查询本身没有查询条件,可以把其它查询通过逻辑运算进行组合
修改索引和删除索引
其实基础步骤都差不多
创建文档对象目录
创建索引写入器配置对象
创建索引写入器
删除/修改——(执行操作)
提交
关闭
Lucene的高级使用
高亮显示
原理:给所有关键字加上一个HTML标签,给这个标签设置特殊CSS样式
创建目录对象…创建查询对象
创建格式化器
创建查询分数工具
准备高亮工具
搜索
获取结果
用高连工具处理普通的查询结果
排序
分页
得分算法
Lucene会对搜索结果打分,用来表示文档数据与词条的关联性强弱

参考博客:https://blog.csdn.net/weixin_42633131/article/details/82873731
这篇博客里面的代码实现很详细

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值