StandardAnalyzer对象 2.使用分析器对象的tokenStream方法获得一个TokenStream对象
------------恢复内容开始------------
一,什么是全文检索
观点:先创建索引然后盘问索引的过程就做全文索引。索引一次创建可以多次使用,表示为每次盘问速度都很快。
二,数据的分类
布局化数据:格局固定,长度固定,数据类型固定 好比数据库的数据
非布局化数据:格局不固定,长度不固定,数据类型不固定word文档,pdf文档,邮件,html,txt
三,数据的盘问
布局化数据的盘问:SQL语句,盘问简单,速度快
非布局化数据的盘问:
从文本文件中查找出包罗spring单词的文件
目测
使用措施把文档读取到内存中,然后匹配字符串
把非布局化数据进行字符串拆分,得到一个单词的列表,基于单词列表创建一个索引,然后盘问索引,按照单词和文档的对应关系找到文档列表,这个过程就叫做全文索引
索引:一个为了提高盘问速度,创建某种数据布局的调集
四,全文检索的应用场景
搜索引擎:百度,360,谷歌,搜狗
站内搜索:论坛搜索,微博,文章搜索
电商搜索:淘宝,京东
只要是搜索的处所就可以使用全文搜索技术
五,什么是Lucene
Lucene,是基于Java开发的全文检索工具包
Lucene实现全文检索的流程
创建索引
获得文档
原始文档:要基于哪些数据来进行搜索,那么这些数据就是原始文档
搜索引擎:使用爬虫获得原始文档
站内搜索:数据库中的数据
案例:直接使用io流读取磁盘上的文件
构建文档东西
对应每个原始文档创建一个Document东西
每个Document东西中包罗多个域(field)
域中生存的就是原始文档数据:域的名称 和 域的值
每个文档都有一个独一的编号,就是文档id
分析文档:就是分词的过程
按照空格进行字符串拆分,得到一个单词列表
把单词统一转换成小写
去除标点标记
去除停用词:无意义的词
每个关键词都封装成一个Term东西中
Term中包罗两部分内容:关键词地址的域,关键词自己
差此外域中拆分出来的不异关键词是差此外term
创建索引:
基于关键词列表创建一个索引,生存在索引库中,索引库中包罗:索引,document东西,关键词和文档的对应关系
通过词语找文档,,这种索引的布局叫倒排索引布局
盘问索引
用户盘问接口:用户输入盘问的条件的处所 例如百度的搜索框
把关键词封装成一个盘问东西:要盘问的域,要盘问的关键词
执行盘问
按照要盘问的关键词到对应的域长进行搜索
找到关键词,按照关键词找到对应的文档
衬着功效
按照文档的id找到文档东西
对关键词进行高亮显示
分页措置惩罚惩罚
...
最终展示给用户看
六,Lucene快速入门
入门需求:
实现一个文件的搜索成果,通过关键字搜索文件,通常文件名或者文件内容包孕关键字的文件都需要找出来。还可以按照中文词语进行盘问,并且需要撑持多个条件盘问。本案例的原始内容就是磁盘上的文件
1.创建索引
工程搭建:
创建一个空的Java工程
添加jar依赖:lucene-analyzers-common-7.4.0.jar,lucene-core-7.4.0.jar,commons-io.jar
法式:
1.创建一个Directory东西,指定索引库生存的位置
2.基于Directory东西创建一个IndexWriter东西
3.读取磁盘上的文件,对应每个文件创建一个文档东西
4.向文档东西中添加域
5.把文档东西写入索引库
6.封锁IndexWriter东西
2.代码
1 public class LuceneFirst { 2 @Test 3 public void createIndex() throws Exception{ 4 // 1.创建一个Director东西,指定索引库生存的位置 5 // Directory directory = new RAMDirectory(); //索引库生存在内存中 6 Directory directory = FSDirectory.open(new File("E:\\temp\\index").toPath()); 7 // 2.基于Director东西创建一个IndexWriter东西 8 IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig()); 9 // 3.读取磁盘上的文件,对应每个文件创建一个文档东西 10 File dir = new File("D:\\java(新课程)\\00 讲义+条记+资料\\风行框架\\61.会员版(2.0)-就业课(2.0)-Lucene\\lucene\\02.参考资料\\searchsource"); 11 File[] files = dir.listFiles(); 12 for (File file : files) { 13 String fileName = file.getName(); //获取文件名 14 String filePath = file.getPath(); //获取文件路径 15 String fileContext = FileUtils.readFileToString(file, "utf-8"); //获取文件内容 16 long fileSize = FileUtils.sizeOf(file); //获取文件巨细 17 18 //创建Field 19 //参数:域的名称,域的内容,是否存储 20 Field fieldName = new TextField("name", fileName, Field.Store.YES); 21 Field fieldPath = new TextField("filePath", filePath, Field.Store.YES); 22 Field fieldContext = new TextField("fileContext", fileContext, Field.Store.YES); 23 Field fieldSize = new TextField("fileSize", fileSize+"", Field.Store.YES); 24 25 //创建文档东西 26 Document document = new Document(); 27 // 4.向文档东西中添加域 28 document.add(fieldName); 29 document.add(fieldPath); 30 document.add(fieldContext); 31 document.add(fieldSize); 32 // 5.把文档东西写入索引库 33 indexWriter.addDocument(document); 34 } 35 // 6.封锁IndexWriter东西 36 indexWriter.close(); 37 } 38 }
2.盘问索引库
法式:
1.创建一个Directory东西,指定索引库的位置
2.创建一个IndexReader东西
3.创建一个IndexSearcher东西,结构要领中的参数IndexReader 东西
4.创建一个Query东西,TermQuery
5.执行盘问,得到一个TomDocs东西
6.取盘问功效的总记录数
7.取文档列表
8.打印文档的内容
9.封锁IndexReader东西
代码实现
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32479.html
- 上一篇:应该去那里提升认知
- 下一篇:申请Netflix退款