安全过滤器:限制匹配范围
下面的例子里面,有两个索引文档,两者在关键字域里面都包含info项,但是每个文档属于不同的所有者;如果不使用过滤器的话,我们会搜索召两个文档。考虑到安全性,这当然不是我们想要的结果,因此我们可以使用QueryWrapperFilter将搜索空间限制在某个用于所拥有的文档范围之内。
示例代码:
package com.tan.code;
import java.io.IOException;
import java.util.logging.Filter;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
public class SecurityFilterTest {
private IndexWriter indexWriter = null;
private IndexSearcher indexSearcher = null;
public void securityFilter() throws IOException {
//写入内存
Directory directory = new RAMDirectory();
indexWriter = new IndexWriter(directory, new IndexWriterConfig(
Version.LUCENE_43, new StandardAnalyzer(Version.LUCENE_43)));
Document document = new Document();
// LiMing
document.add(new StringField("id", "1", Store.YES));
document.add(new TextField("owner", "LiMing", Store.YES));
document.add(new TextField("keywords", "LiMing Info", Store.YES));
indexWriter.addDocument(document);
// TanWeiJie
document = new Document();
document.add(new StringField("id", "2", Store.YES));
document.add(new TextField("owner", "TanWeiJie", Store.YES));
document.add(new TextField("keywords", "TannWeiJie Info", Store.YES));
indexWriter.addDocument(document);
indexWriter.commit();
indexWriter.close();
IndexReader r = DirectoryReader.open(directory);
indexSearcher = new IndexSearcher(r);
// 不使用过滤器
TermQuery termQuery = new TermQuery(new Term("keywords", "info"));
System.out.println("不使用过滤器匹配到"
+ indexSearcher.search(termQuery, 10).totalHits + "个结果");
// 使用过滤器
QueryWrapperFilter limingfilter = new QueryWrapperFilter(new TermQuery(
new Term("owner", "liming"))); // 注意这里需要小写,使用Luke查看索引的時候就可以發現分詞器都把大寫轉換成小寫
System.out.println("使用过滤器匹配到"
+ indexSearcher.search(termQuery, limingfilter, 10).totalHits
+ "个结果");
}
}
测试代码:
@Test
public void test() throws IOException {
//fail("Not yet implemented");
SecurityFilterTest securityFilterTest=new SecurityFilterTest();
securityFilterTest.securityFilter();
}
输出结果:
不使用过滤器匹配到2个结果
使用过滤器匹配到1个结果
【参考《Lucene In Action》】
分享到:
相关推荐
NULL 博文链接:https://iamyida.iteye.com/blog/2199368
Lucene索引器实例Lucene索引器实例Lucene索引器实例Lucene索引器实例
Lucene中文分词器组件,不错的。
c#下实现Lucene时间区间查询匹配。主要还是对Lucene查循对像Query的实现
lucene3.0 中文分词器, 庖丁解牛
07.Lucene搜索实战1 共4页 08.Lucene搜索实战2 共5页 09.Lucene搜索深入实战1 共5页 10.Lucene搜索深入实战2 共11页 11.Lucene搜索深入实战进阶1 共4页 12.Lucene搜索深入实战进阶2 共9页 13.Lucene搜索深入实战进阶...
来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器。 1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP) 2. 对数量词、地名、路名的...
lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例
lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....
lucene的排序过滤和分页,lucene开发技术,lucene下载
lucene搜索引擎中文分词器,版本2.0.4,强大的中文分词效果在其它中文分词器当中独领风骚
全文检索介绍 索引 分词 Lucene介绍 Lucene应用详解 索引器 检索器 条件查询 实用工具及高亮器 Lucene综合应用——仿搜索引擎
lucene3.6 搜索例子
Java搜索引擎 Lucene,是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单确强大的应用程式接口,能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟工具;就其本身而...
一个基于LUCENE搜索引擎项目例子一个基于LUCENE搜索引擎项目例子一个基于LUCENE搜索引擎项目例子
(3) 数字域范围过滤(NumericRangeFilter) 40 (4) 查询结果过滤(QueryWrapperFilter) 40 5.3 自定义评分 41 (1) 创建一个类继承CustomScoreQuery 41 (2) 创建一个类继承CustomScoreProvider 42 (3) 自定义评分...
07.Lucene搜索实战1 共4页 08.Lucene搜索实战2 共5页 09.Lucene搜索深入实战1 共5页 10.Lucene搜索深入实战2 共11页 11.Lucene搜索深入实战进阶1 共4页 12.Lucene搜索深入实战进阶2 共9页 13.Lucene搜索深入实战进阶...
lucene 索引库查看器 5.3.0 版本,欢迎大家一起学习交流。
lucene 近实时搜索 很清楚的解释了关于lucene近实时搜索的代码。很值得学习
Lucene实现全文搜索,支持英文、模糊和智能查询