package com.bj.xxzxb;
import java.io.File;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.NumericRangeQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TermRangeQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.search.highlight.SimpleSpanFragmenter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class LuceneUtil {
private static final String[] ids = { "001", "002", "003" };
private static final String[] authors = { "赵XX", "钱XX", "李XX" };
private static final String[] titles = { "中文分词器", "全文检索引", "更新索引方法" };
private static final String[] dates = { "2018-06-01", "2018-07-06", "2018-08-08" };
private static final String[] contents = { "Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包", "Lucene最初是由Doug Cutting开发的,在SourceForge的网站上提供下载。在2001年9月做为高质量的开源Java产品加入到Apache软件基金会的 Jakarta家族中。", "Lucene是一个高性能、可伸缩的信息搜索(IR)库。它可以为你的应用程序添加索引和搜索能力。"};
public static void main(String[] args) {
LuceneUtil luceneUtil = new LuceneUtil();
// 创建索引
// luceneUtil.index();
// 搜索
luceneUtil.search();
// 删除索引
// luceneUtil.delete();
// 检查索引文件
// luceneUtil.check();
// 恢复删除的索引
// luceneUtil.unDelete();
// 强制删除
// luceneUtil.forceDelete();
// 更新索引
// luceneUtil.update();
// 合并索引
// luceneUtil.merge();
}
/**
* 建立索引
*/
public static void index() {
IndexWriter indexWriter = null;
try {
// 1、创建Directory,指定索引库的存放位置, 建立在硬盘式
Directory directory = FSDirectory.open(new File("D:/test/lucene/index"));
// 索引库建立在内存中
// Directory directory = new RAMDirectory();
// 2、创建一个标准分词器,对文档内容进行分析(每个汉字都进行了拆分)
//Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);
// 2、创建使用第三方中文分词器
Analyzer analyzer = new IKAnalyzer();
// 3、创建IndexWriter
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);
indexWriter = new IndexWriter(directory, config);
int size = ids.length;
for (int i = 0; i < size; i++) {
// 4、创建Document对象,
Document document = new Document();
// 5、为Document添加Field,创建field对象,将field添加到document对象中
document.add(new StringField("id", ids[i], Store.YES));
document.add(new TextField("author", authors[i], Store.YES));
document.add(new TextField("title", titles[i], Store.YES));
document.add(new StringField("date", dates[i], Store.YES));
document.add(new TextField("content", contents[i], Store.YES));
/**
* 看看四个参数的意思
* 第一个参数:字段的名称
* 第二个参数:字段内容
* 第三个参数:是否存储
* 1:StringField(FieldName, FieldValue,Store.YES))
* 用来构建一个字符串Field,但是不会进行分析,可以进行索引,会将整个串存储在索引中,比如(姓名,身份证号,单位名称等),用于精确查询
*:2:LongField(FieldName, FieldValue,Store.YES)
* 用来构建一个Long数字型Field,进行分析和索引,比如(价格)
*:3:StoredField(FieldName, FieldValue)
* 用来构建不同类型Field,不分析,不索引
* 4:TextField(FieldName, FieldValue, Store.NO)或TextField(FieldName, reader)
* 用来构建一个字符串或者流的Field,进行分析和索引
*
*/
// 5、使用indexwriter对象将document对象写入索引库,此过程进行索引创建。
indexWriter.addDocument(document);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (indexWriter != null) {
// 关闭IndexReader对象
indexWriter.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 搜索
*/
public static void search() {
DirectoryReader indexReader = null;
try {
// 1、创建Directory,指定索引库的存放位置
Directory directory = FSDirectory.open(new File("D:/test/lucene/index"));
// 2、创建一个indexReader对象,需要指定Directory对象。
indexReader = DirectoryReader.open(directory);
// 3、创建一个indexsearcher对象,需要指定IndexReader对象
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// //第一种查询方式:精确查询
// //创建查询
// //创建一个TermQuery对象,指定查询的字段和查询的关键词
// Query query = new TermQuery(new Term("id", "001"));
// //执行查询
// //第一个参数是查询对象,第二个参数是查询结果返回的最大值
// TopDocs topDocs = indexSearcher.search(query, 10);
//第二种查询方法:精确查询
// 在content中搜索Darren
// 创建parser来确定要搜索文件的内容,第二个参数为搜索的域
QueryParser queryParser = new QueryParser(Version.LUCENE_40, "content", new IKAnalyzer());
// 创建Query表示搜索域为content包含Darren的文档
Query query = queryParser.parse("索引");
//执行查询
//第一个参数是查询对象,第二个参数是查询结果返回的最大值
TopDocs topDocs = indexSearcher.search(query,
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
文档中包含Lucene4.0.0版本jar包,中文分词器jar包,Lucene实例代码 1:建立索引 2:各种搜索方式方法 3:删除索引 4:检查索引文件 5:恢复删除的索引 6:强制删除 7:更新索引 8:合并索引 9:高亮回显 供大家参考学习 public static void main(String[] args) { LuceneUtil luceneUtil = new LuceneUtil(); // 创建索引 // luceneUtil.index(); // 搜索 luceneUtil.search(); // 删除索引 // luceneUtil.delete(); // 检查索引文件 // luceneUtil.check(); // 恢复删除的索引 // luceneUtil.unDelete(); // 强制删除 // luceneUtil.forceDelete(); // 更新索引 // luceneUtil.update(); // 合并索引 // luceneUtil.merge(); }
资源推荐
资源详情
资源评论
收起资源包目录
lucene实例.zip (9个子文件)
lucene实例
lucene-core-4.0.0.jar 1.94MB
lucene-analyzers-common-4.0.0.jar 1.46MB
lucene-demo-4.0.0.jar 28KB
lucene-queryparser-4.0.0.jar 376KB
IKAnalyzer2012FF_u1.jar 1.11MB
lucene-highlighter-4.0.0.jar 97KB
lucene-4.0.0.zip 56.89MB
LuceneUtil.java 19KB
lucene-memory-4.0.0.jar 36KB
共 9 条
- 1
资源评论
- 小迟丶2018-08-14可以,最好在资源中添加介绍,说明是集成的代码,导入第一页面jar包,直接通过.java文件控制
- gzmlsh2023-03-29无法运行,运行出错 #运行出错
琴剑飘零西复东
- 粉丝: 1w+
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- STM32芯片数据手册芯片资料STM32F103ZET6
- 宝塔面板Nginx的Lua-Waf防火墙终极改进 动态封禁IP
- 999.fend-图文.html
- STM32芯片数据手册芯片资料STM32F103x8-B增强型系列中容量产品数据手册(2009年4月)
- java.异常处理(处理方案示例).md
- java.性能监控Prometheus(处理方案示例).md
- STM32芯片数据手册芯片资料STM32F103CDE增强型系列数据手册(2009年3月)
- STM32芯片数据手册芯片资料STM32F102x8-B USB基本型系列中容量产品数据手册(2008年9月)
- 上市公司企业投资者关注度数据及公众关注度数据
- L2 林雪莹 202325220414.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功