原始文档:要基于哪些数据来进行检索
搜索引擎:使用爬虫获得原始文档
站内搜索:数据库中的数据
对应每个原始文档创建一个document对象
每个document对象中包含多个域
域中保存的就是原始文档的数据:域的名称和域的值
每个文档都有一个唯一的id
分词的过程:
1.根据空格进行字符串拆分,得到一个单词列表
2.把单词统一转化为小写
3.去除标点符号
4.去除停用词(无意义的词)
每个关键词封装成一个term对象:
1.关键词所在的域
2.关键词本身
Ps:不同的域中拆分出来的相同的关键词是不同的term
基于关键词列表创建一个索引,保存到索引库中。
索引库中:索引,document,关键词和文档的对应关系
用户输入查询条件的位置
要查询的域
要查询的关键词
根据要查询的关键词到对应的域上进行搜索
找到关键词,根据关键词找到对应的文档
根据文档的id找到文档对象
对关键词进行高亮显示
分页处理
最终展示给用户看
环境:下载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对象
步骤:
1.创建一个Directory对象,指定索引库的位置
2.创建一个IndexReader对象
3.创建一个IndexSearcher对象,构造方法中的参数indexReader对象
4.创建一个Query对象,TermQuery
5.执行查询得到一个TopDocs对象
6.取查询结果总记录数
7.取文档列表
8.打印文档中的内容
9.关闭IndexReader对象
默认使用的是标准分析器StandarAnalyser
使用Analyzer对象的tokenStream方法返回一个TokenStream对象,词对象包含了最终分词结果
实现步骤:
1.创建一个Analyzer对象,StandarAnalyzer对象
2.使用分析器对象的tokenStream方法获得一个TokenStream对象
3.向TokenStream对象中设置一个引用,相当于是一个指针
4.调用TokenStream对象的rest方法,如果不屌用抛异常
5.使用while循环遍历TokenStream对象
6.关闭TokenStream对象
1.把IKAnalyzer的jar包添加到工程中
2.把配置文件和扩展词典添加到工程的classpath下
注意:扩展词典严禁使用windows记事本编辑,以保护扩展词典的编码格式是UTF-8
扩展词典:添加一些新词
停用词词典:无意义的词或者是敏感词汇
1.删除全部
2.根据关键词删除文档
修改的原理是先删除后添加
根据关键词进行查询
需要指定要查询的域及要查询的关键词
范围查询
可以对要查询的内容先进行分词,然后基于分词的结果进行查询
添加一个jar包:Lucent-queryparser-7.4.0.jar
代码详情见以下链接: Lucene入门程序