package com.xp.luence.test;
import java.io.IOException;
import java.util.BitSet;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermDocs;
import org.apache.lucene.index.TermEnum;
import org.apache.lucene.search.Filter;
public class SecurityFilter extends Filter {
private static String title = "title";
private static String content = "content";
private static String security = "security";
public static String titleStore;
public static String contentStore;
public BitSet bits(IndexReader reader) throws IOException {
BitSet bitSet = new BitSet(reader.maxDoc());
bitSet.set(0, reader.maxDoc() - 1);// 设置位队列的每一位都问TRUE
Term term = new Term(security, SecurityFilterSearcher.advance);
TermDocs termDocs = reader.termDocs(term);// 从索引中取出含term的文档
// 遍历文档,设置相应的BitSet中的值问false
while (termDocs.next()) {
bitSet.set(termDocs.doc(), false);
}
return bitSet;
}
}
package com.xp.luence.test;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
public class SecurityFilterSearcher {
public static String advance = "advance";
/**
* @param args
*/
public static void main(String[] args) {
RAMDirectory directory = new RAMDirectory();
String path = "F:\\directory";
try {
IndexWriter writer = new IndexWriter(path,
new StandardAnalyzer(), true, MaxFieldLength.UNLIMITED);
Document document1 = new Document();
Field f1 = new Field("content", "advance one content key 1",
Field.Store.YES, Field.Index.ANALYZED);
Field f2 = new Field("security", "advance", Field.Store.YES,
Field.Index.NOT_ANALYZED);
document1.add(f1);
document1.add(f2);
Document document2 = new Document();
Field f3 = new Field("content", "normal content key 1",
Field.Store.YES, Field.Index.ANALYZED);
Field f4 = new Field("security", "normal", Field.Store.YES,
Field.Index.NOT_ANALYZED);
document2.add(f3);
document2.add(f4);
Document document3 = new Document();
Field f5 = new Field("content", "advance two content key 1",
Field.Store.YES, Field.Index.ANALYZED);
Field f6 = new Field("security", "advance", Field.Store.YES,
Field.Index.NOT_ANALYZED);
document3.add(f5);
document3.add(f6);
writer.addDocument(document1);
writer.addDocument(document2);
writer.addDocument(document3);
writer.close();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
IndexReader reader = IndexReader.open(path);
IndexSearcher searcher = new IndexSearcher(reader);
TermQuery query = new TermQuery(new Term("content", "one"));
SecurityFilter filter = new SecurityFilter();
Hits hits = searcher.search(query, filter);// 在搜索时应用过滤器
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i).get("content"));
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面的SecurityFilter是自己定义lucene的过滤器。实现过滤索引中的相应的内容。代码可以直接运行看到效果!
分享到:
相关推荐
自定义Filter通常需要继承Spring Security的已有Filter或实现其接口。例如,如果你想要实现自定义的登录认证,可以扩展`AbstractAuthenticationProcessingFilter`。这个类提供了处理登录请求的基本结构,包括解析...
自定义过滤器,过滤请求接口的请求,认证用户并记录日志
JavaFilter自定义编码过滤器知识点 一、Filter接口和 FilterChain接口 在 Java 中, Filter 接口和 FilterChain 接口是 Servlet 规范中的两个重要组件。 Filter 接口用于定义一个过滤器, FilterChain 接口用于将...
为了实现自定义过滤器,我们可以使用 DevExpress 的 GridControl 提供的 FilterControl 事件。在这个事件中,我们可以编写自定义的过滤器逻辑来处理复杂的查询操作。下面是一个简单的示例代码: ```csharp private ...
自定义过滤器需要实现`Ext.util.Filter`接口,提供自己的`getFilterFn`方法来定义筛选逻辑。 ### 综合应用 **5. 组合过滤** ExtJS Grid还支持组合过滤,即同时应用多个过滤器,可以通过`filters`配置项定义一组...
在微信小程序中,自定义下拉框并实现根据输入实时过滤下拉选项是一项常见的功能,尤其在用户需要从大量数据中快速选择时。这个功能提高了用户体验,使得交互更加直观和高效。下面我们将深入探讨如何在微信小程序中...
filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。 filter()函数有两个参数: 第一个,自...
1. **过滤器接口**:`javax.servlet.Filter`是Java Web应用中的过滤器接口,所有自定义过滤器都必须实现该接口。 2. **生命周期方法**: - `init(FilterConfig config)`:过滤器初始化方法,仅执行一次,在容器启动...
在Java开发中,JSON对象(JSONObject)常用于数据交换,特别是在前后端交互中。当我们序列化或反序列化Java...通过结合使用自定义注解、序列化器和反序列化器,我们可以实现更为复杂的过滤策略,满足特定的业务需求。
在实现"ExtJs Filter 表格过滤"的Demo中,开发者通常会创建一个数据网格,配置每个列的过滤器,然后通过用户界面或代码触发过滤操作。通过分析和学习这个Demo,你可以理解如何集成过滤功能到自己的应用程序中,从而...
1. 创建自定义Filter子类,实现必要的过滤逻辑。 2. 使用Filter的getDocIdSet()方法生成一个BitSet,该BitSet标记了哪些文档满足过滤条件。 3. 将Filter与Query一起传递给Searcher的search()方法,Lucene会自动使用...
Spring Security 是一个强大的安全框架,用于为Java应用...通过阅读这些文件,你可以更深入地了解自定义过滤器的实现细节。学习和实践这个例子,有助于提升你对Spring Security的掌握,使你能更好地应对各种安全挑战。
vue.js的filter定义的方式,已经简单的demo,自定义过滤器如何给文字加颜色
1. 实现`javax.servlet.Filter`接口:创建一个类,实现`doFilter()`方法,然后在`WebApplicationInitializer`或`WebMvcConfigurer`接口的实现类中注册该过滤器。 ```java public class MyFilter implements Filter ...
创建自定义过滤器需实现`Filter`接口,并在`web.xml`配置文件中声明。在本实例中,可能包含一个用于处理特定请求或者对用户身份验证的过滤器。 接着,我们来看文件上传下载功能。在Struts2中,文件上传主要依赖于...
当数据量较大或者需要实现搜索功能时,我们往往需要对Adapter进行扩展,添加自定义的TextFilter来实现搜索过滤。本篇将详细介绍如何为Adapter设计一个搜索TextFilter,以解决在多个元素的ListView中根据指定内容进行...
Vue不仅内置了一些过滤器,还允许开发者自定义过滤器以满足特定需求。 首先,我们来看看Vue内置过滤器的使用。 Vue内置过滤器非常丰富,包括但不限于: - `capitalize`:将字符串首字母大写。 - `uppercase`:将...
本篇文章将深入探讨如何在Python中实现一个计算时间差的自定义过滤器。 首先,我们需要了解Django的模板过滤器系统。Django的`django.template.Library.filter()`函数用于注册自定义过滤器。在定义过滤器时,我们...
5. **自定义日志事件处理器**:通过实现`Filter`接口,我们可以自定义事件处理逻辑,比如在日志写入前进行加密操作,或者在某些特定条件下修改日志消息。 6. **自定义异常处理**:对于异常日志,Log4j允许我们定制...
首先,`datagrid-filter.js` 文件很可能包含了实现过滤功能的 JavaScript 代码。在 EasyUI 中,DataGrid 的过滤功能是通过设置列的 `filter` 属性来启用的。例如,我们可以在创建 DataGrid 时,为每一列定义过滤条件...