简介
最近项目要使用solr,solr是基于lucene开发的,而我这方面的知识还停留在lucene2.x版本的,不得不承认,不知不觉中,lucene已经7.x版本了。出于项目和个人方面的原因,打算利用点时间补充。
我使用的是lucene7.3.1版本、jdk1.8、eclipse4.7
lucene是一个全文检索的工具包。是apache下的开源项目。它使用的索引结构是倒排索引表又叫反向索引结构。
非倒排索引是在一直的文档中根据关键字逐个匹配扫描
倒排索引根据关键字匹配索引中的词,根据匹配的词找到文档。
倒排索引表包括:索引域和文档域。
文档域的作用:将数据结构化存储到索引文件中。
索引域的作用:为了搜索。
lucene 索引与like区别
数据库like方式查询时全表扫描的,数据量少这样也能忍受,如果数据量上,这种方式会很慢。
Lucene是倒排索引,使用lucene建立一个索引库,一次建立多次使用。索引对应document,检索速度很快、性能也很好。
lucene下载地址
http://archive.apache.org/dist/lucene/java/
lucene官方参考文档
http://lucene.apache.org/core/7_3_1/index.html
如何使用lucene
- 创建项目导入相关jar
- 采集数据(文档、数据库等数据)
- 将采集的数据统一结构化处理,创建成Document对象
- 使用分词器对field内容进行分词处理
- 使用IndexWriter创建索引
- 创建查询语句
- IndexSearcher搜索索引
- IndexSearcher搜索完毕返回TopDocs,Topdocs中存储了匹配相关度最高前n条记录
理解lucene中的Field
Field是文档中的域,包括Field名和Field值两部分,一个Document可以包括多个Field,Field值即为要索引的内容,也是要搜索的内容。
Field有几个概念:
- 是否分词 :在搜索的时候,通常输入的是关键词,这个是否分词的意思是,是否将改field的值进行分词还是作为一个整体不分词搜索。在实际需求中,比如id、身份证号、订单号、这些是不需要分词,直接作为一个整体搜索即可
- 是否索引:意思就是是否建立索引,如果建立索引,那么搜索的时候可以检索到,大多数情况,如果进行分词,也会进行索引。这样分词才有意义。
- 是否存储:是否将内容存储到索引中,是否存储看需求,如果存储,搜索结果中可以获取到存储的内容,反之不可以。
luke工具
1.下载地址
https://github.com/DmitryKey/luke/releases
2.启动
luke.bat 双击即可启动
3.luke介绍
https://blog.csdn.net/dac55300424/article/details/24322907