java 搜索引擎 关键词高亮_Lucene关键词高亮显示

该博客介绍了如何利用Lucene5构建搜索引擎,并实现查询结果中关键词的高亮显示。通过使用Analyzer、QueryParser、Highlighter等工具,对索引文件进行搜索并高亮处理搜索结果。
摘要由CSDN通过智能技术生成

Lucene5 实现搜索引擎功能,高亮代码

packagesearch.searchengine.cs.swjtu;importjava.io.IOException;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.ArrayList;importjava.util.List;importorg.apache.lucene.analysis.Analyzer;importorg.apache.lucene.analysis.TokenStream;importorg.apache.lucene.analysis.standard.StandardAnalyzer;importorg.apache.lucene.document.Document;importorg.apache.lucene.index.DirectoryReader;importorg.apache.lucene.index.IndexReader;importorg.apache.lucene.queryparser.classic.ParseException;importorg.apache.lucene.queryparser.classic.QueryParser;importorg.apache.lucene.search.IndexSearcher;importorg.apache.lucene.search.ScoreDoc;importorg.apache.lucene.search.TopScoreDocCollector;importorg.apache.lucene.search.highlight.Formatter;importorg.apache.lucene.search.highlight.Fragmenter;importorg.apache.lucene.search.highlight.Highlighter;importorg.apache.lucene.search.highlight.InvalidTokenOffsetsException;importorg.apache.lucene.search.highlight.QueryScorer;importorg.apache.lucene.search.highlight.SimpleFragmenter;importorg.apache.lucene.search.highlight.SimpleHTMLFormatter;importorg.apache.lucene.search.highlight.SimpleSpanFragmenter;importorg.apache.lucene.search.highlight.TokenSources;importorg.apache.lucene.store.Directory;importorg.apache.lucene.store.FSDirectory;public classQuery {/**

* 索引后,进行查询,将查询结果封装为QueryBean对象,加入session,为JSP提供页面结果

*

**/

private static String lighterStr(org.apache.lucene.search.Query query,Analyzer a,String fieldName,String txt) throwsIOException, InvalidTokenOffsetsException {

String str= null;//设定放回结果

QueryScorer queryScorer = new QueryScorer(query);//如果有需要,可以传入评分//设置高亮标签

Formatter formatter = new SimpleHTMLFormatter("", "");//高亮分析器

Highlighter hl = newHighlighter(formatter, queryScorer);

Fragmenter fragmenter= newSimpleSpanFragmenter(queryScorer);

hl.setTextFragmenter(fragmenter);//获取返回结果

str =hl.getBestFragment(a, fieldName,txt);if(str == null){returntxt;

}returnstr;

}public static List query(String queryString,String indexUrl) throwsIOException, ParseException, InvalidTokenOffsetsException {/**/ /* 这里放索引文件的位置*/Path path=Paths.get(indexUrl);

Directory indexDir=FSDirectory.open(path);

org.apache.lucene.search.Query query= null;

IndexReader reader=DirectoryReader.open(indexDir);

IndexSearcher searcher= newIndexSearcher(reader);

TopScoreDocCollector collector= TopScoreDocCollector.create(10);

Analyzer analyzer= newStandardAnalyzer();

QueryScorer queryScorer= new QueryScorer(query);//如果有需要,可以传入评分//设置高亮标签

Formatter formatter = new SimpleHTMLFormatter("", "");//高亮分析器

Highlighter hl = newHighlighter(formatter, queryScorer);

Fragmenter fragmenter= newSimpleSpanFragmenter(queryScorer);

hl.setTextFragmenter(fragmenter);try{

QueryParser qp= new QueryParser( "content", analyzer);

query=qp.parse(queryString);

}catch(ParseException e) {

}

searcher.search(query, collector);

ScoreDoc[] hits=collector.topDocs().scoreDocs;

List rstList = new ArrayList();//结果列表(已高亮处理)

System.out.println("Found " + hits.length + " hits.");for(int i=0;i

Document d=searcher.doc(docId);

String rst= "";

String title= d.get("title");

String content= d.get("content");

title= lighterStr(query, analyzer, "title", title);

content= lighterStr(query, analyzer, "content", content);

rst= d.get("url")+"\t"+title+"\t"+content;

rstList.add(rst);//System.out.println((i + 1) +". " + d.get("url") +" "+title+"\t"+content);

System.out.println((i + 1) +". " +rst);

}returnrstList;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值