摘自:http://iamyida.iteye.com/blog/2199368

1.TermFilter:就是按照Term去过滤,跟TermQuery类似: 

Filter filter = new TermFilter(new Term("subject","junit"));

2.TermsFilter:它是用来进行多Term过滤的,是相对于TermFilter的:

Filter filter = new TermsFilter(new Term[] {
new Term("subject","lucene"),
new Term("pubmonth","201005")
});

3.FieldValueFilter:仅仅是对单个域进行过滤,即只返回包含指定域的索引文档,对域值没有进行限定

//negate表示是否取反,默认是包含指定域,取反意思就是不包含指定域
Filter filter = new FieldValueFilter("category", false);

4.BooleanFilter:用来链接多个Filter的,类似于BooleanQuery

BooleanFilter booleanFilter = new BooleanFilter();
booleanFilter.add(filter1, Occur.MUST);
booleanFilter.add(filter2, Occur.MUST);

 MUST:表示必须符合

MUST_NOT:与MUST相对应,取MUST的否定,即必须不符合

SHOULD:在英语表示一种很委婉的语气,即可以的意思,不是强制性的,即可有可无的意思.

5.QueryWrapperFilter:用来把Query包装成一个Filter

        Query query = new TermQuery(new Term("title","junit"));
//把一个Query对象包装成一个Filter对象
Filter filter1 = new QueryWrapperFilter(query);
//title域中a-j范围内的,包含a,j两个边界
Filter filter2 = TermRangeFilter.newStringRange("title", "a", "j", true, true); BooleanFilter booleanFilter = new BooleanFilter();
booleanFilter.add(filter1, Occur.MUST);
booleanFilter.add(filter2, Occur.MUST);

6.DuplicateFilter:用来去除重复索引文档的

7.MultiTermQueryWrapperFilter:把MultiTermQuery包装成一个Filter,其下面派生了很多子Filter

  TermRangeFilter:用进行字符串型Field的范围过滤的,跟TermRangeQuery用法类似,只是Filter不进行打分操作

Filter filter2 = TermRangeFilter.newStringRange("title", "a", "j", true, true); 

  NumericRangeFilter:对数字域进行范围过滤的Filter,跟NumericRangeQuery很类似

Filter filter2 = NumericRangeFilter.newIntRange("pubmonth", 199908, 201005, true, true);

  PrefixFilter:与PrefixQuery对应,即过滤出以xxxx打头的索引文档

Filter filter2 = new PrefixFilter(new Term("title","lucene"));

8.DocValuesRangeFilter:用来进行范围过滤的,DocValuesRangeFilter是与DocValuesFiled域对应的,即它只适用于对DocValuesFiled进行范围过滤,它不能直接通过构造函数进行构建,它是通过内部提供的静态方法来构建的

//先把搜索范围限定在 pubmonth in[199901 to 201005]的索引文档
Filter filter = DocValuesRangeFilter
.newIntRange("pubmonth", 199901, 201005, true, true);

9.CachingWrapperFilter:包装类,即把Filter包装为一个包含缓存功能的Filter,也是典型的装饰者模式,SegmentCoreReaders就是把当前的indexReader的克隆对象缓存了一份,其实就是key是和当前的indexReader对应的,所以在用CachingWrapperFilter的时候,你要保证前后两次你使用的是同一个IndexReader对象,只有这样你使用CachingWrapperFilter才会利用到缓存,否则你还是会重新去执行Filter的过滤操作。

Filter filter = new CachingWrapperFilter(new TermFilter(new Term("subject","junit")));

10.自定义过滤器:继承Filter基类

public class MyCustomFilter extends Filter{  

    public MyCustomFilter() {
// TODO Auto-generated constructor stub
} private String[] terms;//限制返回的数据字典
public MyCustomFilter(String ...terms) {
// TODO Auto-generated constructor stub
this.terms=terms;
}
@Override
public DocIdSet getDocIdSet(AtomicReaderContext arg0, Bits arg1)
throws IOException {
FixedBitSet bits=new FixedBitSet(arg0.reader().maxDoc()) ;//获取没有所有的docid包括未删除的
int base=arg0.docBase;//段的相对基数,保证多个段时相对位置正确
//int limit=base+arg0.reader().maxDoc();//计算最大限制值
for(String s:terms){
DocsEnum doc=arg0.reader().termDocsEnum(new Term("id", s));//必须是唯一的不重复
//保证是单个不重复的term,如果重复的话,默认会取第一个作为返回结果集,分词后的term也不适用自定义term
if(doc.nextDoc()!=-1){
bits.set(doc.docID());//对付符合条件约束的docid循环添加到bits里面
}
}
return bits;
}

lucene Filter过滤器的更多相关文章

  1. filter 过滤器(监听)

    Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, ...

  2. Java防止SQL注入2(通过filter过滤器功能进行拦截)

    首先说明一点,这个过滤器拦截其实是不靠谱的,比如说我的一篇文章是介绍sql注入的,或者评论的内容是有关sql的,那会过滤掉:且如果每个页面都经过这个过滤器,那么效率也是非常低的. 如果是要SQL注入拦 ...

  3. Filter(过滤器)学习

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  4. javaweb学习总结(四十二)——Filter(过滤器)学习

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  5. Filter过滤器简单应用( 接口访问控制 )

    一.描述 在提供安卓.IOS客户端接口时,可以在登陆接口分配Session给客户端,用于判断其他接口是否是合法访问,以避免将所有的接口都暴露在web中可以由路径直接访问.但是最近的一个项目中的移动接口 ...

  6. 如何配置Filter过滤器处理JSP中文乱码

    参考Tomcat服务器目录webapps的examples示例 简单配置步骤:1.在项目web.xml文件添加过滤器标记<filter>和<filter-mapping>:2. ...

  7. Filter(过滤器)常见应用

    孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(四十六)——Filter(过滤器)常见应用 一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html F ...

  8. Filter过滤器(1)

    Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...

  9. Servlet的学习之Filter过滤器技术(1)

    本篇将讲诉Servlet中一项非常重要的技术,Filter过滤器技术.通过过滤器,可以对来自客户端的请求进行拦截,进行预处理或者对最终响应给客户端的数据进行处理后再输出. 要想使用Filter过滤器, ...

随机推荐

  1. 搭建基于springmvc,ibatis的工程实现读写分离,配置分离

    实现读写分离: 1.spring配置如下:spring-dataResource.xml <?xml version="1.0" encoding="UTF-8&q ...

  2. Kendo UI开发教程(9): Kendo UI Validator 概述

    Kendo UI Validator 支持了客户端校验的便捷方法,它基于HTML 5 的表单校验功能,支持很多内置的校验规则,同时也提供了自定义规则的便捷方法. 完整的Kendo UI 的Valida ...

  3. linux下如何使用USB存储设备

    如何在Linux环境中使用USB接口的 存储 设备?这是各大电脑论坛上出现得比较多的一个问题,同此可见这也是摆在许多电脑玩家面前的一道难题. 本文就为您提供一套完美的解决方案,通过下面的方法,您仅可以 ...

  4. java打印正金字塔,倒金字塔和“水影”金字塔

    java打印正金字塔,倒金字塔和"水影"金字塔 --------原创文章,若要转载,请注明出处   小小少年 闲来无事,想起自己初学java的时候做的经典的无非就是打印出一些有意思 ...

  5. 数据意识崛起,从企业应用看BI软件的未来发展

    前阵子,和一群企业CIO聊天,希望从甲方角度看看对BI产品的看法.在问及一些成熟企业为何不上BI项目时,大家纷纷表示目前还处于观望状态. 提及BI,大家都觉得有些飘忽,和大数据一样,听着高大上,能真正 ...

  6. sublime vue 语法高亮插件安装

    默认情况下,Vue.js 的单文件组件(*.vue)在 sublime 编辑器中是不被识别的.若要想高亮显示,需要安装插件 Vue Syntax Hightlight.安装步骤如下:   第一,在 s ...

  7. Objective-C运行时态消息传递--拼接方法名

    做IOS开发的人都知道,Objective-C语言中方法的调用是运行时采取绑定的,在编译过程中只声明该方法的存在. 那么我们来简单说下在运行时,类的消息传递. 在运行时,每个方法如[self meth ...

  8. Linux中一些简单命令(一)

    1.查看当前用户:who 2.显示当前目录:pwd 3.查看当前服务器的时间:date 4.查看日历:cal+year; 例如:cal 2016 5.计算器:bc  退出计算器:quit或者ctrl+ ...

  9. ueditor的工具按钮配置

    定制工具栏图标 UEditor 工具栏上的按钮列表可以自定义配置,只需要通过修改配置项就可以实现需求 配置项修改说明 修改配置项的方法: 1. 方法一:修改 ueditor.config.js 里面的 ...

  10. AsyncHttpClient 中的重定向和 setEnableRedirects 方法异常解决

    今天使用 AsyncHttpClient  开源库,遇到个很崩溃的问题: 方法  setEnableRedirects(false); 从名称上看应该是重定向开关的方法,设置为 false 后则普通请 ...