lucene--关键字查找
来源:互联网 发布:短信拦截软件 编辑:程序博客网 时间:2024/04/20 04:22
lucene的搜索功能能够提供多关键字,多条件等等的查询,下面的示例代码主要是给出了关键字在多个域的查询。另外lucene的hightlighter包(该包需要另外下载)还提供了一个高亮关键字的功能。在示例代码中也给出了高亮关键字的例子。
示例代码:
- //DocDetailBean是存放文件信息的bean
- public ArrayList<DocDetailBean> search(String keyword) throws Exception {
- ArrayList<DocDetailBean> list = new ArrayList<DocDetailBean>();
- //获取索引路径
- Directory directory = FSDirectory.getDirectory(indexPath);
- //词义分析器
- Analyzer analyzer = new StandardAnalyzer();
- //搜索器
- IndexSearcher searcher = new IndexSearcher(directory);
- //对关键字分词
- final String[] field_list = {"content", "fileName"};
- if (keyword == null) {
- return list;
- }
- QueryParser multi_parser = new MultiFieldQueryParser(field_list, analyzer);//多域分词
- Query query = multi_parser.parse(keyword);
- //单域分词
- // Query query = new QueryParser("content", analyzer).parse(toKeyWord(keyWords));
- TopDocCollector collector = new TopDocCollector(1000); //1000表示命中的最条条数是1000条
- searcher.search(query, collector);
- ScoreDoc[] hits = collector.topDocs().scoreDocs; //获得选中结果
- //高亮关键字
- SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<strong><font color='red'>", "</font></strong>");
- Highlighter highlighter = new Highlighter(formatter, new QueryScorer(query));
- highlighter.setTextFragmenter(new SimpleFragmenter(200));
- //搜索出结果,并封装到bean中,
- for (int i = 0; i < hits.length; ++i) {
- //找到这个Document原来的索引值
- int docId = hits[i].doc;
- Document d = searcher.doc(docId); //查找原文档
- String text = d.get("content");
- TokenStream tokenStream = TokenSources.getAnyTokenStream(searcher.getIndexReader(), docId, "content", analyzer);
- TextFragment[] frag = highlighter.getBestTextFragments(tokenStream, text, false, 200);
- String brief = "";
- for (int j = 0; j < frag.length; j++) {
- if ((frag[j] != null && (frag[j].getScore() > 0))) {
- brief += frag[j].toString();
- }
- }
- DocDetailBean ddb = new DocDetailBean();
- ddb.setID(docId);
- ddb.setFileName(d.getField("fileName").stringValue());
- ddb.setPath(d.getField("path").stringValue());
- ddb.setBrief(brief);
- list.add(ddb);
- if (i > 98) {
- break;
- }
- }
- searcher.close();
- // if(list.size()>200) return (ArrayList<DocDetailBean>) list.subList(0, 199);
- return list;
- }
对于搜索方面,参考资料中的文章做了比较好的总结,可以点击链接查看。
参考资料:《Lucene2.4入门总结》 http://idealab.javaeye.com/blog/365869
- lucene--关键字查找
- lucene--关键字查找
- lucene 4.3 查找关键字高亮
- Lucene 学习(三):在一个(或者多个)字段中查找多个关键字
- lucene高亮关键字
- lucene 关键字高亮
- lucene多关键字查询
- 关键字查找
- Lucene---查找的实现
- lucene初探(-):lucene基本,实现文件查找
- lucene搜索关键字中的空格
- Lucene关键字高亮显示
- 查找页面关键字
- 关键字查找算法
- 通过关键字查找群
- 关键字查找器
- 查找文本文件中的关键字
- linux 查找文件关键字
- ubuntu 批量删除 .svn
- SQL Server 开发之 复制表数据的SQL脚本生成器(带参数导出)
- lucene--建立索引
- U盘量产工具
- java 命名回顾
- lucene--关键字查找
- 微软提供的minidump功能
- C# DateTime ToString
- EXT核心API详解(三)-Ext.Element
- vc++ 下载远程图片
- EXT核心API详解(四)-Ext.DomQuery/DomHelper/Template
- Html的空格显示
- EXT核心API详解(五)-Ext.EventManager
- 运行galde编写的UI程序时报错:libglade-WARNING **: could not find signal handler 'gtk_reset'.