LuceneTest
/**
* Created by mhm on 2019/6/24.
*/
@RunWith(SpringJUnit4ClassRunner.class)
public class LuceneTest { @Test
public void test1() throws IOException {
/**
* 1.准备数据 文档对象
* Document 封装数据 要创建索引的数据必须先放着Document
*
* id 1
* title 背影
* author 朱自清
* content 你站在这里不要动,我去给你买几个橘子
*
* Field 封装数据 实体类中一个属性数据封装在一个Field对象中
* 八种基本类型 StringField 数据不会做分词处理
* TextField 文本Field 数据会分词
*
* 参数1:name 属性名
* 参数2:value 属性值
* 参数3:Field.Store.YES
*/
Document document = new Document();
document.add(new IntField("id",1, Field.Store.YES));
document.add(new TextField("title","背影",Field.Store.YES));
document.add(new StringField("author","朱自清",Field.Store.YES));
document.add(new TextField("content","你站在这里不要动,我去给你买几个橘子",Field.Store.YES)); /**
* 2.扫描数据 创建索引
*
* IndexWriter 索引写出对象
* 作用
* 1.将索引持久化 实际上就是流
* 2.定义分词规则 分词器(别人封装好的分词规则)
*
* 参数1:Directory 指明索引保存的位置 这个文件夹的位置就是索引库
* 参数2:IndexWriterConfig 索引写出配置对象 定义分词规则
* IndexWriterConfig
* 参数1:Lucene的版本
* 参数2:分词器对象
*/ FSDirectory fsDirectory = FSDirectory.open(new File("E://Lucene"));
/**
* StandardAnalyzer 标准分词器
*/
StandardAnalyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_44);
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_44,standardAnalyzer);
IndexWriter indexWriter = new IndexWriter(fsDirectory,indexWriterConfig); /**
* 3.addDocument 把原始数据给写出对象
* indexWriter 会把原始数据写出到索引库 在写出的同时indexWriter会自动的扫描原始数据创建索引
*/
indexWriter.addDocument(document);
/**
* 4.将索引提交到索引库
*/
indexWriter.commit();
/**
* 5.释放资源
*/
indexWriter.close();
}
/**
* 查询
*/
@Test
public void test2() throws ParseException, IOException {
/**
* 1. 准备关键词
*/
String keyword = "你站在这里不要动";
/**
* 2. 处理关键词(拆分) Query对象(封装了拆分好的关键词)
* MultiFieldQueryParser 关键词处理对象 可以将关键词处理为Query对象
* 参数1:版本
* 参数2:属性名的数组(被查询的属性)
* 参数3:分词器对象 拆分词语 必须和创建的索引时候的分词器一致
*
* parse 方法处理关键词
*/
String[] fileds = {"title","content"};
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_44,fileds,new StandardAnalyzer(Version.LUCENE_44));
Query query = queryParser.parse(keyword);
/**
* 3. 用处理好的关键词 查索引
*
* 把索引库读取到JVM里面(内存)
* IndexSearcher 索引查询对象
* 参数1:索引读取对象
*
* DirectoryReader.open() 读取索引库
* 参数1:FSDirectory File System 文件系统 指的就是磁盘
*
*/
FSDirectory directory = FSDirectory.open(new File("E://Lucene"));
DirectoryReader directoryReader = DirectoryReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(directoryReader);
/**
* 4. 通过查到的索引中的位置信息 获取数据
*
* search()
* 参数1:处理好的关键词
* 参数2:期望结果条数 你想要查到最多多少条信息
*
* 返回值 TopDocs 封装了结果的信息(索引 分数等待)
*
*/
TopDocs topDocs = indexSearcher.search(query, 10);
/**
* ScoreDoc 分数和文档对象的数组
* 封装了分数和Document的docId(Lucene在创建索引的时候自动生成的 就是位置信息)
*
* Lucene在创建索引库的时候,不仅创建了索引,还把原始数据Document对象也放在了索引库中
*/
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
System.out.println(Arrays.toString(scoreDocs));
/**
* 5.通过位置信息docId去索引库中获取原始数据
*/
for (int i = 0; i < scoreDocs.length; i++) {
ScoreDoc scoreDoc = scoreDocs[i];
// 获取docId
int docId = scoreDoc.doc;
// 通过docId获取索引库中对应的Document对象(对象中封装了原始数据)
Document document = indexSearcher.doc(docId);
System.out.println(document);
String id = document.get("id");
String title = document.get("title");
String author = document.get("author");
String content = document.get("content");
System.out.println(id+" "+title+" "+author+" "+content);
}
}
}
LuceneTest的更多相关文章
- MVC+MQ+WinServices+Lucene.Net Demo
前言: 我之前没有接触过Lucene.Net相关的知识,最近在园子里看到很多大神在分享这块的内容,深受启发.秉着“实践出真知”的精神,再结合公司项目的实际情况,有了写一个Demo的想法,算是对自己能力 ...
- lucene4.7学习总结
花了一段时间学习lucene今天有时间把所学的写下来,网上有很多文章但大部分都是2.X和3.X版本的(当前最新版本4.9),希望这篇文章对自己和初学者有所帮助. 学习目录 (1)什么是lucene ( ...
- lucene之排序、设置权重、优化、分布式搜索(转)
lucene之排序.设置权重.优化.分布式搜索(转) 1. 基本应用 using System;using System.Collections.Generic;using System.Text;u ...
- lucene创建索引简单示例
利用空闲时间写了一个使用lucene创建索引简单示例, 1.使用maven创建的项目 2.需要用到的jar如下: 废话不多说,直接贴代码如下: 1.创建索引的类(HelloLucene): packa ...
- apache pdfbox
转 http://www.blogjava.net/sxyx2008/archive/2010/07/23/326890.html 轻松使用apache pdfbox将pdf文件生成图 近期在项目中使 ...
- MVC+MQ+WinServices+Lucene.Net
MVC+MQ+WinServices+Lucene.Net Demo 前言: 我之前没有接触过Lucene.Net相关的知识,最近在园子里看到很多大神在分享这块的内容,深受启发.秉着“实践出真知”的精 ...
- Spring AOP中的动态代理
0 前言 1 动态代理 1.1 JDK动态代理 1.2 CGLIB动态代理 1.2.1 CGLIB的代理用法 1.2.2 CGLIB的过滤功能 2 Spring AOP中的动态代理机制 2.1 ...
- 使用Lucene全文检索并使用中文版和高亮显示
使用Lucene全文检索并使用中文版和高亮显示 中文分词需要引入 中文分词发的jar 包,咱们从maven中获取 <!-- lucene中文分词器 --> <dependency&g ...
- Lucene 搜索的初步探究
搜索应用程序和 Lucene 之间的关系 一般的搜索引擎都会采用这样的 Lucene 采用的是一种称为反向索引(inverted index)的机制.反向索引就是说我们维护了一个词 / 短语表,对于这 ...
随机推荐
- Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密
[前言] 在工作中,有时候我们请求的参数可能需要加密,比如登录接口中的密码做了加密操作,今天我就给大家介绍一种方法:Jmeter用BeanShell Sampler调用java写的jar包进行MD5加 ...
- Nacos深入浅出(十)
基本上到第9篇,整个请求的一套就结束了,感觉这里跳跳绕绕很多东西,下面我们来做个总结:从Nacos配置平台修改,到Client请求更新,事件触发去取值返回给客户端,整个过程感觉只分析到了4.5层的深度 ...
- POJ1014 Dividing
题目来源:http://poj.org/problem?id=1014 题目大意: Marsha和Bill拥有一些弹珠.但是这些弹珠的价值不一样.每个弹珠的价值都是1到6之间的自然数.他们希望把这些弹 ...
- js原型链,作用域,闭包讲解
当面试的时候遇到问原型链,闭包,还有作用域,直接 拿张纸和笔把原型链画出来,闭包跟作用域直接用笔写几道题出来加深理解(因为我们是理科生,图形和题目以及控制台输出结果才是最直观的方法) 问:什么是原型链 ...
- Docker从入门到实战(二)
Docker从入门到实战(二) 一:什么是docker Docker是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到主流的Linux.MacOS.Windo ...
- D. Vitya and Strange Lesson
http://codeforces.com/contest/842/problem/D 1.整体的数组是不用变的,比如数组a[]经过一次询问x后,然后再询问y,相当于询问x ^ y ^ a[i]后的m ...
- js执行上下文和执行栈
执行上下文就是JavaScript 在被解析和运行时环境的抽象概念,JavaScript 运行任何代码都是在执行上下文环境中运行的,执行上下文包括三个周期:创建——运行——销毁,重点说一下创建环节. ...
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
- SQLServer数据库语句大全汇总
目录清单CONTEXT LIST1.数据库DataBase 1.1数据库建立/删除create/drop database 1.2数据库备份与恢复backup/restore database2.数据 ...
- css相关知识
display: block; "块级元素". display: inline; "行内元素". display: none; "在不删除元素的情况下 ...