lucene 过滤结果
2014-06-19 15:28
197 查看
package cn.itcast.h_filter; import java.util.ArrayList; import java.util.List; import org.apache.lucene.document.Document; import org.apache.lucene.queryParser.MultiFieldQueryParser; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Filter; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.NumericRangeFilter; import org.apache.lucene.search.Query; import org.apache.lucene.search.Sort; import org.apache.lucene.search.SortField; import org.apache.lucene.search.TopDocs; import org.apache.lucene.util.Version; import org.junit.Test; import cn.itcast._domain.Article; import cn.itcast._util.ArticleDocumentUtils; import cn.itcast._util.LuceneUtils; public class TestApp { // 搜索 @Test public void testSearch() throws Exception { // 准备查询条件 String queryString = "lucene"; // 执行搜索 List<Article> list = new ArrayList<Article>(); // 1,把查询字符串转为Query对象(从title和content中查询) QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new String[] { "title", "content" }, LuceneUtils.getAnalyzer()); Query query = queryParser.parse(queryString); // 2,执行查询,得到中间结果 IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.getDirectory()); // 指定所用的索引库 // TopDocs topDocs = indexSearcher.search(query, 100); // 最多返回前n条结果 // ========================================================================================== 【创建高亮器】 // indexSearcher.search(query, n); // indexSearcher.search(query, filter, n); // indexSearcher.search(query, filter, n, sort); Filter filter = NumericRangeFilter.newIntRange("id", 5, 15, false, true); // null表示没有过滤条件 选择 (5,15] 之间的过滤的数据,后面的boolean判断 括号开闭用处的 TopDocs topDocs = indexSearcher.search(query, filter, 100); // ========================================================================================== // 3,处理结果 for (int i = 0; i < topDocs.scoreDocs.length; i++) { // 根据编号拿到Document数据 int docId = topDocs.scoreDocs[i].doc; // Document的内部编号 Document doc = indexSearcher.doc(docId); // 把Document转为Article Article article = ArticleDocumentUtils.documentToArticle(doc); list.add(article); } indexSearcher.close(); // 显示结果 System.out.println("总结果数:" + list.size()); for (Article a : list) { System.out.println("------------------------------"); System.out.println("id = " + a.getId()); System.out.println("title = " + a.getTitle()); System.out.println("content = " + a.getContent()); } } }
相关文章推荐
- Lucene实战(三)多Field搜索,并且对搜索结果进行过滤和[自定义]排序
- lucene 过滤结果
- lucene-对hit结果提供的导航及过滤结果的缓存
- Lucene查询结果Hits的二次封装
- Lucene在结果中索引
- Lucene Hack之通过缩小搜索结果集来提升性能 (1)
- lucene 中文分词和结果高亮显示
- Lucene查询结果Hits的二次封装
- LuceneSearch 现在要对查询结果进行排序的显示。
- lucene 自定义评分 (给lucene自带的评分*我们filed的系数) 如搜索结果时间的加权
- 【显示过滤/排序结果】非常实用
- PowerSehll 中过滤管道结果
- Lucene.Net 实现groupby并可以加入自定义过滤功能
- Lucene 结果中搜索,多索引搜索
- lucene-检索结果的翻页问题
- lucene 排序、过滤、分词器
- lucene整理3 -- 排序、过滤、分词器
- lucene查看分词结果
- 一个自定义的用语过滤非字符的Lucene分析器
- lucene4.7 过滤Filter(六)