lucene3.0+版本中文分词测试+搜索结果+创建索引测试

简介:

lucene3.0+版本中文分词测试+搜索结果+创建索引测试


import java.io.File; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.TermAttribute; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriter.MaxFieldLength; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.highlight.Highlighter; import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.SimpleFragmenter; import org.apache.lucene.search.highlight.SimpleHTMLFormatter; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.util.Version; import org.wltea.analyzer.lucene.IKAnalyzer; public class AnalzyerTest { 	/** 	 * lucene3.0开始已经抛弃了原来的分词方式,转而使用新的分词方式<br> 	 * 本方法以SmartChineseAnalyzer为例,演示如何分词以及取得分词之后的term 	 * http://blog.csdn.net/yjflinchong/article/details/7906116 	 * @throws Exception 	 */ 	public static void analysis() throws Exception { 		Analyzer analyzer = new IKAnalyzer(); 		String string = "据外媒报道,菲律宾国防部长加斯明9日称,多种新式战机、船只将于年内陆续交付军方,菲国防实力将得到大幅增强。但加斯明同时强调,此次军备采购与黄岩岛争端无关。"; 		StringReader reader = new StringReader(string); 		TokenStream ts = analyzer.tokenStream("", reader); 		TermAttribute termAttribute = ts.getAttribute(TermAttribute.class); 		while (ts.incrementToken()) { 			System.out.println(termAttribute.term() + "  "); 		} 		System.out.println(); 	} 	/** 	 * 建索引 	 * 在构造IndexWriter时必须使用Directory作为参数了 	 *  	 * @throws CorruptIndexException 	 * @throws LockObtainFailedException 	 * @throws IOException 	 */ 	private static void build() throws CorruptIndexException, LockObtainFailedException, IOException { 		String path = "index"; 		IndexWriter writer = new IndexWriter(FSDirectory.open(new File(path)), new IKAnalyzer(), true, MaxFieldLength.LIMITED); 		Document document = new Document(); 		document.add(new Field("text", "中国人民银行采取了一系列措施防止人民币升值,但是很遗憾,这些措施在今天看来其作用是微乎其微的。难道真的就没有什么别的措施防止人民币再次疯狂升值了吗?", Store.YES, Index.ANALYZED)); 		writer.addDocument(document); 		writer.optimize(); 		writer.close(); 	} 	/** 	 *  	 * @param keyword 	 * @throws CorruptIndexException 	 * @throws IOException 	 * @throws ParseException 	 * @throws InvalidTokenOffsetsException 	 */ 	private static void search(String keyword) throws CorruptIndexException, IOException, ParseException, InvalidTokenOffsetsException { 		Analyzer analyzer = new IKAnalyzer(); 		QueryParser parser = new QueryParser(Version.LUCENE_30, "text", analyzer); 		IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("index"))); 		Query query = parser.parse(keyword); 		System.out.println(query); 		TopDocs topDocs = searcher.search(query, 10); 		ScoreDoc[] scoreDocs = topDocs.scoreDocs; 		System.out.println("hits:" + topDocs.totalHits); 		for (ScoreDoc scoreDoc : scoreDocs) { 			Document doc = searcher.doc(scoreDoc.doc); 			String text = doc.get("text"); 			System.out.println(highlight(text, query, analyzer)); 		} 	} 	/** 	 * 高亮关键词 	 * http://blog.csdn.net/yjflinchong/article/details/7906116 	 * @param content 	 *            需要高亮的内容 	 * @param query 	 *            搜索时使用的Query对象 	 * @param analyzer 	 *            分词器 	 * @return 高亮之后的文本 	 * @throws IOException 	 * @throws InvalidTokenOffsetsException 	 */ 	private static String highlight(String content, Query query, Analyzer analyzer) throws IOException, InvalidTokenOffsetsException { 		SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<b>", "</b>"); 		Highlighter highlighter = new Highlighter(formatter, new QueryScorer(query)); 		highlighter.setTextFragmenter(new SimpleFragmenter(100)); 		String resultString = highlighter.getBestFragment(analyzer.tokenStream("", new StringReader(content)), content); 		return resultString + "..."; 	} 	public static void main(String[] args) throws Exception { 		analysis(); 		build(); 		search("人民币 升值"); 	} } 


注明来源:http://blog.csdn.net/yjflinchong/article/details/7906116

lucene3.0以上版本中文分词测试+搜索结果+创建索引测试




      本文转自yjflinchong 51CTO博客,原文链接:http://blog.51cto.com/yjflinchong/1165005,如需转载请自行联系原作者

相关文章
|
6天前
|
运维 Prometheus 监控
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
|
14天前
|
安全 Linux 虚拟化
|
1月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
|
1月前
|
机器学习/深度学习 算法 PyTorch
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-7.0版本进行目标检测的完整流程,包括算法介绍、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。YOLOv5以其高精度、快速度和模型小尺寸在计算机视觉领域受到广泛应用。
409 0
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
|
3月前
|
安全 应用服务中间件 网络安全
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
54 11
|
4月前
|
弹性计算 Prometheus Cloud Native
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
|
4月前
|
关系型数据库 MySQL 测试技术
数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
【7月更文挑战第21天】数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
107 1
|
4月前
|
算法
基于Dijkstra算法的最优行驶路线搜索matlab仿真,以实际城市复杂路线为例进行测试
使用MATLAB2022a实现的Dijkstra算法在城市地图上搜索最优行驶路线的仿真。用户通过鼠标点击设定起点和终点,算法规划路径并显示长度。测试显示,尽管在某些复杂情况下计算路径可能与实际有偏差,但多数场景下Dijkstra算法能找到接近最短路径。核心代码包括图的显示、用户交互及Dijkstra算法实现。算法基于图论,不断更新未访问节点的最短路径。测试结果证明其在简单路线及多数复杂城市路况下表现良好,但在交通拥堵等特殊情况下需结合其他数据提升准确性。
|
5月前
|
Web App开发 IDE Java
自动化测试谷歌浏览器和其驱动版本差不多却还是报错The chromedriver version (121.0.6167.184) detected in PATH at DPythonchromed
自动化测试谷歌浏览器和其驱动版本差不多却还是报错The chromedriver version (121.0.6167.184) detected in PATH at DPythonchromed
134 2
|
5月前
|
Java 测试技术 数据库
【单文件版本】java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境
【单文件版本】java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境
46 0

热门文章

最新文章