`

自定义Filter,实现过滤

阅读更多

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的过滤器。实现过滤索引中的相应的内容。代码可以直接运行看到效果!

分享到:
评论
2 楼 p_x1984 2009-07-15  
不好意思,下次改正!
1 楼 yiding_he 2009-07-06  
楼主完全不会贴代码。

相关推荐

    springsecurity2 自定义filter实现

    自定义Filter通常需要继承Spring Security的已有Filter或实现其接口。例如,如果你想要实现自定义的登录认证,可以扩展`AbstractAuthenticationProcessingFilter`。这个类提供了处理登录请求的基本结构,包括解析...

    java自定义filter过滤特定请求并记录日志

    自定义过滤器,过滤请求接口的请求,认证用户并记录日志

    javaFilter自定义编码过滤器

    JavaFilter自定义编码过滤器知识点 一、Filter接口和 FilterChain接口 在 Java 中, Filter 接口和 FilterChain 接口是 Servlet 规范中的两个重要组件。 Filter 接口用于定义一个过滤器, FilterChain 接口用于将...

    GridControl的过滤器的自定义

    为了实现自定义过滤器,我们可以使用 DevExpress 的 GridControl 提供的 FilterControl 事件。在这个事件中,我们可以编写自定义的过滤器逻辑来处理复杂的查询操作。下面是一个简单的示例代码: ```csharp private ...

    ExtJS Filter 实现表格过滤

    自定义过滤器需要实现`Ext.util.Filter`接口,提供自己的`getFilterFn`方法来定义筛选逻辑。 ### 综合应用 **5. 组合过滤** ExtJS Grid还支持组合过滤,即同时应用多个过滤器,可以通过`filters`配置项定义一组...

    微信小程序自定义下拉框实现根据输入过滤下拉项.zip

    在微信小程序中,自定义下拉框并实现根据输入实时过滤下拉选项是一项常见的功能,尤其在用户需要从大量数据中快速选择时。这个功能提高了用户体验,使得交互更加直观和高效。下面我们将深入探讨如何在微信小程序中...

    Python过滤函数filter()使用自定义函数过滤序列实例

    filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。 filter()函数有两个参数: 第一个,自...

    Java自定义过滤器

    1. **过滤器接口**:`javax.servlet.Filter`是Java Web应用中的过滤器接口,所有自定义过滤器都必须实现该接口。 2. **生命周期方法**: - `init(FilterConfig config)`:过滤器初始化方法,仅执行一次,在容器启动...

    自定义JSONObject属性过滤注解

    在Java开发中,JSON对象(JSONObject)常用于数据交换,特别是在前后端交互中。当我们序列化或反序列化Java...通过结合使用自定义注解、序列化器和反序列化器,我们可以实现更为复杂的过滤策略,满足特定的业务需求。

    ExtJs Filter 表格过滤

    在实现"ExtJs Filter 表格过滤"的Demo中,开发者通常会创建一个数据网格,配置每个列的过滤器,然后通过用户界面或代码触发过滤操作。通过分析和学习这个Demo,你可以理解如何集成过滤功能到自己的应用程序中,从而...

    Lucene5学习之Filter过滤器

    1. 创建自定义Filter子类,实现必要的过滤逻辑。 2. 使用Filter的getDocIdSet()方法生成一个BitSet,该BitSet标记了哪些文档满足过滤条件。 3. 将Filter与Query一起传递给Searcher的search()方法,Lucene会自动使用...

    spring security 4 小例子带自定义过滤器

    Spring Security 是一个强大的安全框架,用于为Java应用...通过阅读这些文件,你可以更深入地了解自定义过滤器的实现细节。学习和实践这个例子,有助于提升你对Spring Security的掌握,使你能更好地应对各种安全挑战。

    vue自定义过滤器,例如给文字加颜色

    vue.js的filter定义的方式,已经简单的demo,自定义过滤器如何给文字加颜色

    spring-boot 过滤器 filter

    1. 实现`javax.servlet.Filter`接口:创建一个类,实现`doFilter()`方法,然后在`WebApplicationInitializer`或`WebMvcConfigurer`接口的实现类中注册该过滤器。 ```java public class MyFilter implements Filter ...

    struts2实例 自定义过滤器 文件上传下载 登录功能

    创建自定义过滤器需实现`Filter`接口,并在`web.xml`配置文件中声明。在本实例中,可能包含一个用于处理特定请求或者对用户身份验证的过滤器。 接着,我们来看文件上传下载功能。在Struts2中,文件上传主要依赖于...

    ,为自定义adapter设计搜索TextFilter

    当数据量较大或者需要实现搜索功能时,我们往往需要对Adapter进行扩展,添加自定义的TextFilter来实现搜索过滤。本篇将详细介绍如何为Adapter设计一个搜索TextFilter,以解决在多个元素的ListView中根据指定内容进行...

    vue 内置过滤器的使用总结(附加自定义过滤器)

    Vue不仅内置了一些过滤器,还允许开发者自定义过滤器以满足特定需求。 首先,我们来看看Vue内置过滤器的使用。 Vue内置过滤器非常丰富,包括但不限于: - `capitalize`:将字符串首字母大写。 - `uppercase`:将...

    Python自定义计算时间过滤器实现过程解析

    本篇文章将深入探讨如何在Python中实现一个计算时间差的自定义过滤器。 首先,我们需要了解Django的模板过滤器系统。Django的`django.template.Library.filter()`函数用于注册自定义过滤器。在定义过滤器时,我们...

    log4j自定义

    5. **自定义日志事件处理器**:通过实现`Filter`接口,我们可以自定义事件处理逻辑,比如在日志写入前进行加密操作,或者在某些特定条件下修改日志消息。 6. **自定义异常处理**:对于异常日志,Log4j允许我们定制...

    EasyUI DataGrid过滤用法实例

    首先,`datagrid-filter.js` 文件很可能包含了实现过滤功能的 JavaScript 代码。在 EasyUI 中,DataGrid 的过滤功能是通过设置列的 `filter` 属性来启用的。例如,我们可以在创建 DataGrid 时,为每一列定义过滤条件...

Global site tag (gtag.js) - Google Analytics