`
weitao1026
  • 浏览: 1062719 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Lucene中,一些常用Filter的用法

阅读更多
Lucene中,一些常用Filter的用法和例子,今天,我们在来看下不在Filter家族中的一个特殊的filter,属于Lucene捐赠模块的特殊包中的类DuplicateFilter,这个filter的作用是用来对某个字段进行去重操作的,类似数据库中的Distinct关键字,可以实现对某个列的结果集去重,这个去重的字段,一般情况下是不建议分词的,因为分词后,可能去重效果不准确.


举个例子,来说明分词后去重,会造成什么情况,假如我们的索引name一列中有中国,和伟大的中国,那么就对这个name列去重后,就会发现lucene只保留了伟大的中国这个字段,为什么呢?因为切词后伟大的中国会被分成伟大|的|中国,进行去重时,Lucene认为中国是重复的,而伟大的中国是不重复的,又因为伟大的中国里包含中国,所以最后的结果就会只保留伟大的中国,而没有中国。所以无论使用这个过滤器去重,还是使用grouping或fact去重,大多数情况下操作的字段是不能分词的,这一点需要注意!


下面我们来具体看下DuplicateFilter这个特殊的过滤器,怎么使用。在这之前我们先来看下我们简单的测试数据.




Java代码 复制代码 收藏代码
1.name===type 
2.a===>中国 
3.a===>法国 
4.b===>中国 
5.c===>英国 
6.d===>英国 
7.b===>英国 



分别对对name和type去重后的效果(注意一次只能去重一个字段)



Java代码 复制代码 收藏代码
1.a 
2.c 
3.d 
4.b 





Java代码 复制代码 收藏代码
1.法国 
2.中国 
3.英国 


下面给出具体的代码实现,需要额外导入的包



Java代码 复制代码 收藏代码
1.org.apache.lucene.sandbox.queries 


核心代码



Java代码 复制代码 收藏代码
1.      //群交流 324714439 
2.      //String field="name"; 
3.          String field="type"; 
4.DuplicateFilter filter=new DuplicateFilter(field);//去重过滤 
5.Query q=new MatchAllDocsQuery();//对所有结果去重 
6.TopDocs s=search.search(q, filter, 100); 



可以看出,核心的代码量很少,却可以高效的完成去重工作,去重技术在我们的实际运用中也是一项很常用的技术,有时候我们可能只需要查看不重复的记录,而没有一些类似统计的功能,如果需要去重并统计个数,那么就需要使用分组功能或分面功能了,当然,如果我们只需要简单的对字段去重,那么就可以使用DuplicateFilter简洁高效的来完成这项任务。

分享到:
评论

相关推荐

    使用lucene4.10,IKAnalyzer5.0提取敏感词

    3. 自定义`StopFilter`:创建一个新的`Filter`类,继承自`Lucene`的`TokenFilter`,并在`incrementToken()`方法中实现敏感词的检查和过滤。 4. 应用`StopFilter`:在建立`Analyzer`实例时,使用自定义的`StopFilter`...

    Lucene3.0.1 官方api

    **正文** Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了强大的文本分析、索引和...通过深入学习官方API文档中的`docs`,开发者可以全面了解每个类和方法的具体用法,从而在实践中灵活运用。

    lucene代码

    3. 分词器(Tokenizer)与过滤器(Filter):Lucene使用分词器将文本拆分成可搜索的术语,然后通过过滤器进行进一步处理,如去除停用词、转换为小写等。 4. 倒排索引(Inverted Index):这是Lucene的核心数据结构...

    Lucene分词与查询详解

    - 使用Filter和QueryWrapperFilter可以过滤出满足特定条件的文档。 - 查询时可以使用Boosting来提高某些词元的权重,影响最终得分。 - 聚合(Faceting)功能可以对搜索结果进行分类统计,例如按商品类别或价格区间。...

    lucene2.9.1完整DEMO及开发文档

    b) 常用方法: TopDocs search(Query query, Filter filter, int n); //执行查询。n指的是最多返回的Document的数量。 Document doc(int 文件内部编号); //根据文档的内部编号获取到该Document void close(); //...

    Lucene 2.4.1源码分析

    在标准的Analyzer中,我们通常会看到对停用词(Stop Words)的处理,这是为了提高搜索效率和准确度,因为像“a”、“an”、“the”这样的常用词汇在搜索时通常不会带来实质性的区分。 StandardAnalyzer是Analyzer的...

    Lucene In Action

    3. **编写简单的索引和查询代码**:通过简单的示例代码来熟悉 Lucene 的基本使用方法。 #### 二、索引(Indexing) **索引** 是 Lucene 的核心功能之一。它是指将文档转换为可搜索的形式并存储的过程。索引过程中,...

    java一些 常用 的过滤 器

    根据所提供的标题、描述以及部分模糊的内容,我们可以深入探讨Java中一些常用的过滤器类型及其应用。 ### 1. 认证过滤器(Authentication Filters) 认证过滤器是Web应用程序中最常见的过滤器之一,主要用于身份...

    Java EE常用框架.xmind

    Java EE常用框架 WebService 介绍 基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用 术语 XML. Extensible Markup Language -扩展性标记语言 WSDL – ...

    搜索引擎中的分词以及查找的编程心得

    Porter Stem Filter是Lucene中用于词干提取的一种实现。下面是一个简单的示例代码,展示了如何使用Porter Stem Filter进行分词和词干提取: ```java public class PorterStemAnalyzer extends Analyzer { @...

    LuceneNetDemo

    2. **索引(Index)**:Lucene 使用倒排索引,将文档中的单词转换为词项(Term),然后为每个词项创建一个倒排表,列出包含该词项的所有文档及其位置。 3. **分词器(Tokenizer)与分析器(Analyzer)**:分词器负责...

    基于Java的文本自动分类大作业实现代码

    在Java中,可以使用开源库如Apache Lucene或Stanford NLP来完成这些任务。例如,`Lucene`提供了分词器(Tokenizer)和过滤器(Filter)类,用于进行基本的预处理操作。 接着,我们需要构建词汇表(Vocabulary)。这...

    跟益达学Solr5之使用MMSeg4J分词器

    本篇文章将带你深入学习如何在Solr5中集成并使用MMSeg4J分词器,提升中文处理能力。 首先,我们来了解一下MMSeg4J。这是一个高效、灵活的Java实现的中文分词库,它采用了基于词频的动态最大匹配算法(MaxMatch),...

    搜索功能设计java实现

    - **Java 8 Stream API**:Stream API引入了强大的函数式编程能力,可以通过`filter()`、`findFirst()`等方法实现高效的搜索操作。 3. **Lucene** - **Apache Lucene** 是一个高性能、全文本搜索库,Java开发者...

    根据相似度去文本重复

    在实际项目中,可能会用到一些开源库,例如`Apache Lucene`或`Google's Protocol Buffers`,它们提供了丰富的文本处理和数据存储功能。对于C++,还可以使用`Boost`库来增强编程效率。 综上所述,解决“根据相似度去...

    solr_pinyin

    在Solr中实现拼音检索,主要是通过插件机制,其中最常用的是"Pinyin4j"库。Pinyin4j是一个Java库,用于处理中文字符并将其转换为拼音。它可以将每个汉字转换为对应的拼音表示,这对于构建基于拼音的索引和查询非常...

    ElasticSearch.pdf

    复合查询、filter查询和高亮查询都是在满足复杂查询需求时常用的查询方法。聚合查询则能够提供对数据的统计分析功能,比如去重计数查询和范围统计。 最后,ES的地图经纬度搜索介绍了ES如何处理地理位置信息的查询。...

    Java学习的详细路线图

    - **Filter、Listener**:学习Servlet过滤器(Filter)和监听器(Listener)的使用方法。 - **JSP开发**(重点): - **JSP语法和标签**:掌握JSP页面的编写,了解JSP指令和动作标签。 - **自定义标签**:学习如何...

Global site tag (gtag.js) - Google Analytics