/**
*
* @author Q.Wong [2010-12-17]
*
*/
public class QueryManager {
private static Logger logger = LogManager.getLogger(QueryManager.class);
/**
* 执行查询
*
* @param analyzer
* @param searcher
* @param field
* @param keyWord
* @param n
* @return
* @throws ParseException
* @throws IOException
*/
public static TopDocs doQuery(Analyzer analyzer, Searcher searcher,
String field, String keyWord, int n) throws ParseException,
IOException {
QueryParser parser = new QueryParser(Version.LUCENE_30, field, analyzer);
Query query = parser.parse(keyWord);
TopDocs hits = searcher.search(query, n);
return hits;
}
/**
* 处理查询返回的结果
*
* @param hits
* @param searcher
* @throws CorruptIndexException
* @throws IOException
*/
public static void resolvedResults(TopDocs hits, Searcher searcher)
throws CorruptIndexException, IOException {
ScoreDoc[] scoreDocs = hits.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
Document doc = searcher.doc(scoreDoc.doc);
logger.info(doc.getField("path") + " " + scoreDoc.toString()
+ " ");
}
}
/**
* 执行查询并处理查询结果
* 高亮关键字
*
* @param analyzer
* @param reader
* @param fieldName
* @param keyWord
* @param n
* @throws ParseException
* @throws IOException
* @throws InvalidTokenOffsetsException
*/
public static void doQuery(Analyzer analyzer, IndexReader reader,
String fieldName, String keyWord, int n) throws ParseException,
IOException, InvalidTokenOffsetsException {
QueryParser parser = new QueryParser(Version.LUCENE_30, fieldName,
analyzer);
Query query = parser.parse(keyWord);
Searcher searcher = new IndexSearcher(reader);
TopDocs hits = searcher.search(query, n);
Highlighter highlighter = new Highlighter(new Formatter() {
@Override
public String highlightTerm(String originalText, TokenGroup group) {
if (group.getTotalScore() <= 0) {
return originalText;
}
return "【" + originalText + "】";
}
}, new QueryScorer(query));
int maxNumFragmentsRequired = 5;
String fragmentSeparator = "...";
ScoreDoc[] scoreDocs = hits.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
int docId = scoreDoc.doc;
Document doc = searcher.doc(docId);
String text = doc.get(fieldName);
TermPositionVector tpv = (TermPositionVector) reader
.getTermFreqVector(docId, fieldName);
System.out.println(tpv.size());
TokenStream tokenStream = TokenSources.getTokenStream(tpv);
String result = highlighter.getBestFragments(tokenStream, text,
maxNumFragmentsRequired, fragmentSeparator);
System.out.println(result);
}
}
}
分享到:
相关推荐
lucene demo and paoding good shuang
lucene简单Demo,附带的文件夹考进C盘就OK
lucene简单demo lucene简单demo lucene简单demo lucene简单demo
可用lucene demo 已经有入门级pdf学习
这是一个lucene中文索引程序,采用paoding分词器,包括建立索引和搜索过程。
本压缩包的主要内容是Lucene分词器的demo版本,可以导入到程序中直接使用,包含Lucene分词使用的pom文件,使用前请注意修改存储地址。
lucene3.5全文检索案例lucene+demo
Lucene入门demo,lucene简单的应用
全文索引工具 开源工具 java编写 lucene的简单demo
lucene-demo-6.6.0.jar
luceneDemo(完整代码) lucene入门 基础类的运用、高亮器的实现、相关度排序
Lucene.Net 搜索Demo,介绍怎么使用Lucene.Net实现桌面搜索
lucene实例(lucene demo)
NULL 博文链接:https://iamcrzay.iteye.com/blog/383742
Lucene Demo 挺全的实例,适合初学者。
lucene全文检索示例 demo+jar包
Lucene全文检索Lucene全文检索Lucene全文检索Lucene全文检索
资源为庖丁解牛分词法的最新源码以及生成的jar包,支持最新的Lucene3.4以及Lucene3.0以上版本。Jar包为本地生成
这是我通过对Lucene3.3.0源码进行了简单解读,依据应用详细的做了很多Demo,大家可以一道学习。
基于SpringBoot编写的一个Lucene测试Demo把匹配到的结果高亮摘要显示在前端jsp上