package com;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.wltea.analyzer.lucene.IKAnalyzer;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;
public class Search {
public static void main(String[] args) throws Exception {
String fieldName = "discript";
String keyword = "人民";
/*Query IkQuery = searchIKQuery(fieldName, keyword);
executeQuery(fieldName, keyword,IkQuery);*/
BooleanQuery booleanQuery = searchBooleanQuery(keyword);
executeQuery(fieldName, booleanQuery);
}
public static BooleanQuery searchBooleanQuery( String keyword) throws Exception {
BooleanQuery bq = new BooleanQuery();
Analyzer analyzer = new IKAnalyzer();
String[] fn = {"name"};
// 增加权重
Map<String, Float> filedmap = new HashMap();
filedmap.put("name", 50f);
MultiFieldQueryParser multField = new MultiFieldQueryParser(Version.LUCENE_30, fn, analyzer, filedmap);
Query muquery = multField.parse(keyword);
Query ikquery = IKQueryParser.parseMultiField(fn,keyword);
Term term1 = new Term("discript",keyword);
TermQuery tq = new TermQuery(term1);
bq.add(tq,BooleanClause.Occur.MUST);
bq.add(muquery, BooleanClause.Occur.SHOULD);
//bq.add(ikquery, BooleanClause.Occur.MUST);
System.out.println(bq);
return bq;
}
public static Query searchIKQuery(String fieldName, String keyword) throws IOException{
// 使用IKQueryParser查询分析器构造Query对象
Query query = IKQueryParser.parse(fieldName, keyword);
return query;
}
public static IndexSearcher createSeacher() throws Exception {
IndexSearcher isearcher = null;
Directory directory = null;
File file = new File("C:/commFile/lucence");
directory = FSDirectory.open(file);
// 实例化搜索器
isearcher = new IndexSearcher(directory);
// 在索引器中使用IKSimilarity相似度评估器
isearcher.setSimilarity(new IKSimilarity());
if (directory != null) {
directory.close();
}
return isearcher;
}
public static void executeQuery(String fieldName,Query query)throws Exception {
// 实例化IKAnalyzer分词器
Analyzer analyzer = new IKAnalyzer();
IndexSearcher isearcher = createSeacher();
try {
Sort sort = new Sort();
// 按字段的排序(一个或多个)
SortField[] f = { new SortField("name", SortField.STRING, false) };
sort.setSort(f);
// 搜索相似度最高的10条记录
//TopDocs topDocs = isearcher.search(query, null, 10, sort);
TopDocs topDocs = isearcher.search(query, 10);
// 关键字高亮显示
Formatter formatter = new SimpleHTMLFormatter("<font color=\"red\">", "</font>"); // 前缀和后缀
Scorer scorer = new QueryScorer(query);
Highlighter highlighter = new Highlighter(formatter, scorer);
highlighter.setTextFragmenter(new SimpleFragmenter(200)); // 字长度
System.out.println("命中文章的篇数:" + topDocs.totalHits);
// 输出结果
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (int i = 0; i < topDocs.totalHits; i++) {
int docId =scoreDocs[i].doc;
Document targetDoc = isearcher.doc(docId);
System.out.println("内容:" + targetDoc.get(fieldName)+"===="+targetDoc.get("name"));//输出相应字段的内容
String hupName = highlighter.getBestFragment(analyzer,fieldName,targetDoc.get(fieldName));
//System.out.println(hupName);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (analyzer != null) {
analyzer.close();
}
if (isearcher != null) {
isearcher.close();
}
}
}
}
分享到:
相关推荐
基于lucene 2.4简单的一个索引和搜索实例
用Lucene检索文本,建立索引,用struts构建web程序框架
Lucene创建索引,查询索引的简单使用。
lucene原理:被检索文档创建索引,在索引的基础上搜索。
文档中包含Lucene4.0.0版本jar包,中文分词器jar包,Lucene实例代码 1:建立索引 2:各种搜索方式方法 3:删除索引 4:检查索引文件 5:恢复删除的索引 6:强制删除 7:更新索引 8:合并索引 9:高亮回显 供大家参考...
利用lucene对下载的网络真实数据进行索引并检索索引资源
Lucene(这里用到的是Lucene.net版本也成为DotLucene)是一个信息检索的函数库(Library),利用它你可以为你的应用加上索引和搜索的功能. Lucene的使用者不需要深入了解有关全文检索的知识,仅仅学会使用库中的一个类,...
程序展现了lucene包强大的建索引和搜索功能!
apache软件基金会的网站使用了Lucene作为全文检索的引擎,IBM的开源软件eclipse[9]的2.1版本中也采用了Lucene作为帮助子系统的全文索引引擎,相应的IBM的商业软件Web Sphere[10]中也采用了Lucene。Lucene以其开放源...
本案例通过.Net MVC4基础上,针对Lucene.Net实现全文检索的应用。通过查询数据表中数据,创建索引,通过统一输入框进行全文检索。可以进行对索引的增删改查功能。
编写对索引库的搜索程序(看lucene文档),通过对lucene的索引库的查找,你可以快速找到对应记录的ID
全文检索Lucene,书中详细介绍了Lucene的使用方法,和用lucene创建索引的demo,还介绍了检索框架Compass的使用,供大家学习参考!
利用Lucene.net做的建立索引,检索分页
完整的Eclipse 工程,举一些小例子,Lucene的建立索引、删除索引、以及检索,希望对喜欢或者用Lucene开发程序的朋友们有所帮助!
这是lucene的使用案例,实现了对word文档中的关键字检索,并将检索出的内容高亮打印出来
建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:...
基于struts2的全文检索系统,实现了文件上传和下载,并实现对上传的文件进行检索。
针对中文检索的Lucene改进策略 为了提高基于Lucene中文检索系统的检索精度和效率,通过...理模块中采用提取特定数量的特征词来替代文档的方法能够有效提高Lucene检索系统的效率和精度,增强Lucene检索系统中文 的性能。
最简单的Lucene建立、搜索索引的方法,工程基于Myeclipse10
资源全免费,我的博客有相关的说明,这个是一个eclipse项目,是一个使用lucene全文检索word2007的例子,可以直接运行,但是需要在数据目录下放入word文件 才能创建索引.