lucene 过滤结果

 1 package cn.itcast.h_filter;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 import org.apache.lucene.document.Document;
 7 import org.apache.lucene.queryParser.MultiFieldQueryParser;
 8 import org.apache.lucene.queryParser.QueryParser;
 9 import org.apache.lucene.search.Filter;
10 import org.apache.lucene.search.IndexSearcher;
11 import org.apache.lucene.search.NumericRangeFilter;
12 import org.apache.lucene.search.Query;
13 import org.apache.lucene.search.Sort;
14 import org.apache.lucene.search.SortField;
15 import org.apache.lucene.search.TopDocs;
16 import org.apache.lucene.util.Version;
17 import org.junit.Test;
18
19 import cn.itcast._domain.Article;
20 import cn.itcast._util.ArticleDocumentUtils;
21 import cn.itcast._util.LuceneUtils;
22
23 public class TestApp {
24
25     // 搜索
26     @Test
27     public void testSearch() throws Exception {
28         // 准备查询条件
29         String queryString = "lucene";
30
31         // 执行搜索
32         List<Article> list = new ArrayList<Article>();
33
34         // 1,把查询字符串转为Query对象(从title和content中查询)
35         QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new String[] { "title", "content" }, LuceneUtils.getAnalyzer());
36         Query query = queryParser.parse(queryString);
37
38         // 2,执行查询,得到中间结果
39         IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.getDirectory()); // 指定所用的索引库
40         // TopDocs topDocs = indexSearcher.search(query, 100); // 最多返回前n条结果
41
42         // ========================================================================================== 【创建高亮器】
43         // indexSearcher.search(query, n);
44         // indexSearcher.search(query, filter, n);
45         // indexSearcher.search(query, filter, n, sort);
46
47         Filter filter = NumericRangeFilter.newIntRange("id", 5, 15, false, true); // null表示没有过滤条件   选择 (5,15] 之间的过滤的数据,后面的boolean判断 括号开闭用处的
48         TopDocs topDocs = indexSearcher.search(query, filter, 100);
49
50         // ==========================================================================================
51
52         // 3,处理结果
53         for (int i = 0; i < topDocs.scoreDocs.length; i++) {
54             // 根据编号拿到Document数据
55             int docId = topDocs.scoreDocs[i].doc; // Document的内部编号
56             Document doc = indexSearcher.doc(docId);
57             // 把Document转为Article
58             Article article = ArticleDocumentUtils.documentToArticle(doc);
59             list.add(article);
60         }
61         indexSearcher.close();
62
63         // 显示结果
64         System.out.println("总结果数:" + list.size());
65         for (Article a : list) {
66             System.out.println("------------------------------");
67             System.out.println("id = " + a.getId());
68             System.out.println("title = " + a.getTitle());
69             System.out.println("content = " + a.getContent());
70         }
71     }
72 }

lucene 过滤结果,布布扣,bubuko.com

时间: 2024-10-23 10:02:50

lucene 过滤结果的相关文章

按照范围过滤所使用的类是Lucene的RangeFilter

/*  * 按照范围过滤所使用的类是Lucene的RangeFilter  * 可以按照上下文所规定的范围进行对文本的过滤  * */ package filter; import java.io.IOException; import java.util.BitSet; import org.apache.lucene.analysis.standard.Stand... ask.360kad.com/question/191454.htmlask.360kad.com/question/19

lucene整理3 -- 排序、过滤、分词器

1.    排序 1.1. Sort类 public Sort() public Sort(String field) public Sort(String field,Boolean reverse)  //默认为false,降序排序 public Sort(String[] fields) public Sort(SortField field) public Sort(SortField[] fields) Sort sort=new Sort(“bookname”);按照“booknam

lucene分词器中的Analyzer,TokenStream, Tokenizer, TokenFilter

分词器的核心类: Analyzer:分词器 TokenStream: 分词器做好处理之后得到的一个流.这个流中存储了分词的各种信息,可以通过TokenStream有效的获取到分词单元. 以下是把文件流转换成分词流(TokenStream)的过程 首先,通过Tokenizer来进行分词,不同分词器有着不同的Tokenzier,Tokenzier分完词后,通过TokenFilter对已经分好词的数据进行过滤,比如停止词.过滤完之后,把所有的数据组合成一个TokenStream:以下这图就是把一个re

Solr实现 并集式、多值、复杂 过滤查询的权限【转】

公司开发使用的搜索引擎核心是Solr,但是应为业务原因,需要相对复杂权限机制. 1)通过Solr的filterQuery可以实现field过滤,实现过滤项的效果.索引A{filter1:a,field2:a,field3:a,field4:1}B{filter1:b,field2:b,field3:b,field4:2}C{filter1:c,field2:c,field3:c,field4:3}过滤条件fq=field:b结果B{filter1:b,field2:b,field3:b,fiel

Lucene 索引优化

    转自---http://www.codeceo.com/article/lucene-index.html 1 数值数据类型索引优化 1.1 数值类型索引问题 lucene本质上是一个全文检索引擎而非传统的数据库系统,它基于倒排索引,非常适合处理文本,而处理数值类型却不是强项. 举个应用场景,假设我们倒排存储的是商家,每个商家都有人均消费,用户想查询范围在500~1000这一价格区间内的商家. 一种简单直接的想法就是,将商家人均消费当做字符串写入倒排(如图所示),在进行区间查询时:1)遍

Lucene 4.X 全套教程

http://www.cnblogs.com/forfuture1978/category/300665.html Lucene 4.X 倒排索引原理与实现: (3) Term Dictionary和Index文件 (FST详细解析) 摘要: 我们来看最复杂的部分,就是Term Dictionary和Term Index文件,Term Dictionary文件的后缀名为tim,Term Index文件的后缀名是tip,格式如图所示.Term Dictionary文件首先是一个Header,接下来

lucene自定义过滤器

先介绍下查询与过滤的区别和联系,其实查询(各种Query)和过滤(各种Filter)之间非常相似,可以这样说只要用Query能完成的事,用过滤也都可以完成,它们之间可以相互转换,最大的区别就是使用过滤返回的结果集不带评分操作,而使用Query返回的结果都是带相关性评分的,所以当我们如果有一些跟评分操作没有关系的业务,优先使用Filter操作,将会获取更好的性能,其实这也是Solr里面的q参数跟fq参数的区别.  下面,开始进入正题,在这之前,散仙还是喜欢老生常谈的先来了解一下Lucene里面有关

下载Lucene4.X实战类baidu搜索的大型文档海量搜索系统(分词、过滤、排序、索引)

Lucene是一个高性能.可伸缩的信息搜索(IR)库.目前最新版本是4.3.1. 它可以为你的应用程序添加索引和搜索能力.Lucene是用java实现的.成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License].同样,Lucene是当前非常流行的.免费的Java信息搜索(IR)库. Lucene4.X实战类baidu搜索的大型文档海量搜索系统(分词.过滤.排序.索引),刚刚入手,转一注册文件,视频的确不错,可以先下载看看:htt

lucene、lucene.NET详细使用与优化详解

lucene.lucene.NET详细使用与优化详解 2010-02-01 13:51:11 分类: Linux 1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品. 1.2 lucene能做什么要 回答这个问题,先要了解lucene的本质.实际上lucene的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜