lucene 基于索引的查询
2016-12-05 15:49
387 查看
lucene 基于索引的查询
根据title模糊查询:根据上一篇文章我们将索引生成到了indexpack 文件夹中:
public String searchInfo(HttpServletRequest request) throws CorruptIndexException, IOException,
InvalidTokenOffsetsException, ParseException {
//索引文件保存的路径
String indexpackUrl = InfoService.class.getResource("/").getPath().replaceFirst("/", "")
.replaceAll("WEB-INF/classes/", "")
+ "static/indexpack";
//读取索引文件
IndexReader indexReader = IndexReader.open(new SimpleFSDirectory(new File(indexpackUrl)));
IndexSearcher indexSearch = new IndexSearcher(indexReader);
// 搜索页面传入的参数
String title = request.getParameter("title");
String content = request.getParameter("content");
List<String> fieldsList = new ArrayList<String>();
fieldsList.add("title");
// 单个关键字查询器匹配
// Query query=new TermQuery(new Term("title",title));
// 模糊查查询器
// FuzzyQuery query2=new FuzzyQuery(new
// Term("title","*"+title+"*"),0.1f);
// WildcardQuery query3 = new WildcardQuery(new Term("title", title));
//多个查询组合用到的 可以and 多个query
BooleanQuery booleanQueryHighlighter = new BooleanQuery();
String[] fields = (String[]) fieldsList.toArray(new String[fieldsList.size()]);
//前面讲了多种查询器 这种方式为统一的 不用自己判断使用哪种查询器 解决了我的中文搜索不到的问题
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_30, fields,
new StandardAnalyzer(Version.LUCENE_30));
Query query4 = parser.parse(title);
// 一定包含 Occur.MUST
booleanQueryHighlighter.add(query4, Occur.MUST);
//查询的结果
TopDocs topdocs = indexSearch.search(booleanQueryHighlighter, null, 10);
StringBuilder builder = new StringBuilder();
// 高亮显示
Highlighter highLighter = null;
SimpleHTMLFormatter fomater = new SimpleHTMLFormatter("<font color='red'>", "</font>");
highLighter = new Highlighter(fomater, new QueryScorer(booleanQueryHighlighter));
highLighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));
for (ScoreDoc doc : topdocs.scoreDocs) {
Document document = indexSearch.doc(doc.doc);
TokenStream tokenStream = new StandardAnalyzer(Version.LUCENE_30).tokenStream("token",
new StringReader(document.get("title")));
String str = highLighter.getBestFragment(tokenStream, document.get("title"));
builder.append(str);
}
return builder.toString();
}
相关文章推荐
- 基于JAVA的全文索引引擎Lucene简介(中)
- 如何使用lucene.net,建立索引,索引目录,查询返回结果
- 导致Lucene无法索引查询的NoClassDefFoundError
- [转]在应用中加入全文检索功能(基于Java的全文索引引擎Lucene简介)
- lucene.net 查询与添加索引的同步问题
- 基于JAVA的全文索引引擎Lucene简介(上)
- mysql查询优化之基于索引的排序
- 用Lucene建立索引及查询示例
- 在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介
- 基于Java的全文索引引擎Lucene简介
- 在应用中加入全文检索功能 ——基于Java的全文索引引擎Lucene简介
- [ZT]基于Java的全文索引引擎Lucene
- 在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介
- 用Lucene建立索引及查询示例
- Lucene2.0中使用基于词典的中文分词器建立索引
- 基于.NET的全文索引引擎Lucene.NET
- 基于Java的全文索引引擎Lucene简介
- 在应用中加入全文检索功能—基于Java的全文索引引擎Lucene简介(收藏)
- 用Lucene建立索引及查询示例
- lucene: 格式化值, 用于索引和索引查询条件以及查询结果