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,如需转载请自行联系原作者

相关文章
|
4月前
|
Web App开发 Java Linux
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
Nexus【部署 02】最新版本 nexus-3.35.0-02-unix.tar.gz 安装配置启动及测试(JDK版本+虚拟机参数配置说明)
321 0
|
17天前
|
安全 应用服务中间件 网络安全
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
28 11
|
2月前
|
弹性计算 Prometheus Cloud Native
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
|
2月前
|
关系型数据库 MySQL 测试技术
数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
【7月更文挑战第21天】数据库升级是一个涉及数据备份、新版本安装、数据迁移和测试等关键环节的复杂过程
31 1
|
2月前
|
算法
基于Dijkstra算法的最优行驶路线搜索matlab仿真,以实际城市复杂路线为例进行测试
使用MATLAB2022a实现的Dijkstra算法在城市地图上搜索最优行驶路线的仿真。用户通过鼠标点击设定起点和终点,算法规划路径并显示长度。测试显示,尽管在某些复杂情况下计算路径可能与实际有偏差,但多数场景下Dijkstra算法能找到接近最短路径。核心代码包括图的显示、用户交互及Dijkstra算法实现。算法基于图论,不断更新未访问节点的最短路径。测试结果证明其在简单路线及多数复杂城市路况下表现良好,但在交通拥堵等特殊情况下需结合其他数据提升准确性。
|
3月前
|
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
111 2
|
3月前
|
Java 测试技术 数据库
【单文件版本】java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境
【单文件版本】java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境
35 0
|
3月前
|
Java 测试技术 数据库
java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境【多文件版本】
java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境【多文件版本】
47 0
|
3月前
|
SQL 存储 关系型数据库
MySQL存储过程——Baidu Comate智能代码助手添加20条DML语句——测试索引效果
MySQL存储过程——Baidu Comate智能代码助手添加20条DML语句——测试索引效果
22 0
|
4月前
|
消息中间件 测试技术
百度搜索:蓝易云【使用JMeter安装RabbitMQ测试插件的步骤】
以上是安装RabbitMQ测试插件的基本步骤。根据您的具体需求和JMeter版本,可能会有一些细微的差异,但总体流程应该是相似的。
114 1
下一篇
DDNS