`
deepfuture
  • 浏览: 4375463 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79862
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69455
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:102784
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:283978
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14910
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:66977
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31807
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45791
社区版块
存档分类
最新评论

lucene-搜索过滤

阅读更多

1、使用过滤可以缩小搜索空间,把可能的搜索匹配结果限制在所有文档的一个子集中。

2、内置了三个Filter子类:

1)DateFilter使搜索只限于指定的日期域的值在某一时间范围内的文档空间里

2)QueryFilter把查询结果做为另一个新查询可搜索的文档空间

3)CachingWrappperFilter是其他过滤器的装饰器,将结果缓存起来以便再次使用,从而提高性能。

3、DateFiler

此过滤器仅过滤,但不能缓存,如果重复使用DateFilter,Lucene每次都会重新进行日期过滤.导致性能下降.

下例中modified域索引为Keyword

public class FilterTest extends testcase{

privateQuery allBooks;

privateIndexsearcher searcher;

privateint numAllBooks;

protectedvoid setUp() throws Exception{

super.setUp();

allBooks=new RangeQuery(new Term("pubmonth","190001"),newTerm("pubmonth","200512"),true);

searcher=new IndexSearcher(directory);

Hits hits=searcher.search(allBooks);

numAllBooks=hits.length();
}

 

publicvoid testDateFilter() throws Exception{

Datejan1=parseDate("2004 Jan 01");

Date jan31=parseDate("2004 Jan 31");

Date dec31=parseDate("2004 Dec 31");

//过滤指定日期范围

DateFilter filter=new DateFilter("modified",jan1,dec31);

Hits hits=searcher.search(allBooks,filter);

assertEquals("all modified in 2004",numAllBooks,hits.length());

//过滤某一端日期边界不确定,使用静态方法

filter=DateFilter.Before("modified",jan31);//在jan31结束的结果

filter=DateFilter.After("modified",jan31);//从jan31开始的结果

}

}

4、QueryFilter

提供缓存功能,做为过滤结果将被缓存起来,以后使用同一个QueryFilter对象或IndexSearcher对象进行搜索时,优化性能。

public void testQueryFilter() throwsException{

TermQuery categoryQuery=new TermQuery(newTerm("category","/philosophy/eastern"));

FiltercategoryFilter=newQueryFilter(categoryQuery);

Hits hits=searcher.search(allBooks,categoryFilter);

}

下面使用QueryFilter完成DateFilter功能,并且具有缓存功能

public voidtestQueryFilterRange() throws Exception{

Date jan1=parseDate("2004 Jan01");//返回date对象;

Date dec31=parseDate("2004 Dec 31");

Termstart=newTerm("modified",DateField.dateToString(jan1));

Termend=newTerm("modified",DateField.dateToString(dec31));

 

QueryrangeQuery=new RangeQuery(start,end,true);

Filter filter=newQueryFilter(rangeQuery);

Hits hits=searcher.search(allBooks,filter);
}

下面使用QueryFilter完成通过过滤器使搜索结果文档限定在指定范围内

public void testrangefilter throwsException{

directory=new RAMDirectory();

setUp();

TermQuery query=new TermQuery(new Term("kword","info"));

IndexSearcher searcher=new IndexSearcher(directory);

Hitshits=searcher.search(query);//所以kword域含info的文档

QueryFilter jakeFilter=new QueryFilter(new TermQuery(newTerm("owner","jake")));

hits=searcher.search(query,jakeFilter);//所有owner域为jake的且kword域含info的文档

 

}

5、QueryFilter的替代方案

public void testFilter throws Exception{

TermQuery categoryQuery=newTermQuery(new Term("category","/philosophy/eastern"));

BooleanQuery conQuery=newBooleanQuery();

conQuery.add(allBooks,true,false);

conQuery.add(categoryQuery,true,false);

Hitshits=searcher.search(con1uery);

 

}

6、缓存过滤器结果

对于某此不具有缓存功能的过滤器来说,将它们馐到CachingWrapperFilter中后,Lucene会自动对非缓存过滤器的结果进行缓存(没有被引用的条目会被垃圾收集器清理)。

使用同一个IndexReader实例是使用过滤器缓存的关键。当索引的改变需要体现在搜索过程中时,就需要丢弃原来创建的IndexSearcher实现和IndexReader实例,将它们重新实例化

public void testcachingWrappper() throwsException{

Date jan1=parseDate("2004 Jan 01");

Date dec31=parseDate("2004Dec31");

DateFilter datefilter=new DateFiler("modified",jan1,dec31);

cachingFilter=new CachingWrapperFilter(datefilter);

Hits hits=searcher.search(allBooks,cachingFilter);

}

7、其他非内置的过滤器,在SandBox工具包中提供

1)ChainedFilter组成复杂的过滤器链。

2)FilteredQuery可以对某个查询进行过滤,因为在BooleanQuery对象中,它可做为一个单独查询子句,在不表示查询子句时,它又跟普通的search(Query,Filter)方法所具备的功能是一样的

分享到:
评论

相关推荐

    lucene-4.7.0全套jar包

    Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级、灵活的文本搜索API,允许开发者轻松地在应用程序中实现复杂的搜索功能。这次提供的“lucene-4.7.0”压缩包包含了Lucene 4.7.0...

    Lucene-core-2.0.0.jar

    例如,通过实现Filter接口,开发者可以自定义过滤规则,对搜索结果进行进一步筛选。对于更复杂的查询需求,可以利用ScoreDoc和TopDocs进行排序和分页,提升用户体验。 总的来说,"Lucene-core-2.0.0.jar"是开发全文...

    lucene-core-2.3.0 lucene-core2.4.0以及极易分词器 jar包

    在使用这些组件时,开发者需要了解Lucene的基本概念,如文档模型、倒排索引、查询解析和过滤器等。同时,对于Je-Analysis,需要理解其分词规则,如何配置和调用分词器,以及如何将其集成到Lucene的索引和搜索流程中...

    lucene-2.9.2.jar包+源码

    在Lucene-2.9.2中,索引过程涉及文档分析、字段存储、倒排索引和位图过滤等步骤。在这个过程中,中文分词是关键的一环。 对于中文分词,Lucene-2.9.2提供了对多种分词器的支持,如IK分词器、SmartCN分词器等。这些...

    apache-lucene-analyzers.jar

    Apache Lucene是一个高性能、全文本搜索库,广泛用于构建搜索引擎应用程序。这个名为"apache-lucene-analyzers.jar"的文件是Lucene项目的一部分,主要包含了各种分析器(analyzers)的实现,它们在处理文本数据时起...

    lucene-4.2.1-src.tgz

    7. **高级功能**:Lucene还包括多线程支持、近实时搜索、自定义排序、过滤器(`Filter`)和拦截器(`Collector`)等高级特性,允许开发者进行更复杂的检索策略设计。 8. **扩展性**:Lucene本身只是一个库,开发者...

    lucene-project.zip

    3. **索引(Index)**:Lucene通过创建索引来加快搜索速度。索引是一个结构化的数据存储,允许快速查找包含特定关键词的文档。在索引过程中,文本会被分词,形成所谓的倒排索引。 4. **分词器(Analyzer)**:分词...

    lucene-5.5.3.zip

    Apache Lucene是一个开源全文搜索引擎库,它为开发者提供了在各种应用程序中实现全文搜索功能的工具。这个"lucene-5.5.3.zip"压缩包包含了Lucene 5.5.3版本的所有组件和资源,使得开发人员可以方便地集成到自己的...

    lucene-core-4.9.3,开源jar包

    它不仅支持基本的文本搜索,还提供了高级特性,如布尔查询、短语查询、模糊查询以及对查询结果的排序和过滤。由于其高度可定制性和灵活性,Lucene已成为许多大型企业和开源项目的首选搜索解决方案。 二、Lucene ...

    java全文搜索lucene-3.0.0-src+lib.zip

    《Java全文搜索引擎Lucene 3.0.0源码及库文件详解》 Java全文搜索引擎Lucene是一款开源的、高性能的文本分析和检索库,它为开发者提供了在Java应用程序中实现全文搜索功能的能力。本篇将深入探讨Lucene 3.0.0版本的...

    Lucene 5 主要jar包

    Apache Lucene是一个开源全文搜索引擎库,它为Java开发者提供了强大的文本搜索功能。在这个"Lucene 5 主要jar包"中,我们找到了一系列与Lucene 5.0.0相关的jar文件,这些文件是构建和运行基于Lucene的搜索应用程序的...

    lucene2.3API中文文档、lucene-3.5.0JAR包

    在文档中,你可以找到关于Lucene核心组件的详细信息,如Analyzer(分析器)用于文本预处理,Tokenizer(分词器)进行词汇分割,Filter(过滤器)进行额外的文本处理,以及Document(文档)、Field(字段)和...

    lucene-analysis.jar

    在信息检索和搜索引擎领域,Apache Lucene是一个广泛使用的开源全文检索库。它的核心功能包括文档的索引、搜索以及相关的高级特性。其中,"lucene-analysis.jar"是Lucene项目中的一个重要组件,主要负责文本的预处理...

    lucene-4.6.1全套jar包

    - **过滤器与切面搜索**:提供过滤器接口,用于筛选搜索结果,而切面搜索则能实现分类导航,帮助用户探索不同维度的搜索结果。 **4. 分布式搜索** 在4.6.1版本中,Lucene 已经可以与其他分布式搜索框架如Solr集成...

    lucene-core-3.4.0.jar

    Lucene的最主要工作是替文件的每一个字作索引,索引让搜索的效率比传统的逐字比较大大提高,Lucen提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是使使用者可以随时...

    lucene-4.6.1官方文档

    Apache Lucene 是一个开源全文搜索引擎库,它为开发者提供了强大的文本搜索功能。在4.6.1这个版本中,Lucene 继续保持着其在信息检索领域的领先地位,提供了一系列优化和改进,使得开发者能够更加高效地构建搜索引擎...

    lucene-4.7.0官方文档

    Lucene提供了强大的文本分析和索引功能,使得开发者可以轻松地在大量数据中实现高效、精确的搜索功能。 在Lucene 4.7.0的版本中,官方文档详细阐述了以下几个关键知识点: 1. **Lucene的基本概念**:包括倒排索引...

    lucene-highlighter-4.4.0.jar

    Apache Lucene是一个高性能、全文检索库,它为Java开发者提供了强大的文本分析和搜索功能。在Lucene的众多组件中,Highlighter模块扮演着重要角色,它能够帮助我们从搜索结果中提取出与查询关键词相关的片段,使用户...

    lucene-3.0.0-src.zip

    Apache Lucene 是一个开源全文搜索引擎库,它为开发者提供了强大的文本搜索功能。在这个版本3.0.0的源码中,我们可以深入理解Lucene的核心机制和设计原理,这对于开发、优化以及定制自己的搜索引擎系统具有极大的...

    lucene-core-3.0.0.rar_lucene_lucene-core3

    8. **过滤器(Filter)**:允许我们对搜索结果进行进一步的筛选,比如按日期、评分等条件进行排序。 在Lucene 3.0.0中,还有一些值得注意的改进和特性: 1. **性能优化**:这一版本的Lucene对内存使用和搜索速度...

Global site tag (gtag.js) - Google Analytics