博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lucene4.7 过滤Filter(六) ---特殊的filter(DuplicateFilte)
阅读量:7242 次
发布时间:2019-06-29

本文共 887 字,大约阅读时间需要 2 分钟。

hot3.png

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

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

name===typea===>中国a===>法国b===>中国c===>英国d===>英国b===>英国

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

acdb
法国中国英国

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

org.apache.lucene.sandbox.queries

核心代码

  //群交流 324714439  //String field="name";  String field="type";  DuplicateFilter filter=new DuplicateFilter(field);//去重过滤  Query q=new MatchAllDocsQuery();//对所有结果去重  TopDocs s=search.search(q, filter, 100);

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

转载于:https://my.oschina.net/MrMichael/blog/220940

你可能感兴趣的文章
linux进程状态浅析
查看>>
【JavaScript】DOM节点常用方法介绍02
查看>>
异步操作系列之Generator函数与Async函数
查看>>
水平无限循环弹幕的实现
查看>>
老前端出坑小程序(一)
查看>>
别躲了,机器知道你们的关系
查看>>
C# 通过反射创建实例
查看>>
UML 类图
查看>>
人工智能即将取代人类?
查看>>
关于常用的http请求头以及响应头详解
查看>>
HTML解析过程会触发哪些事件?
查看>>
技术变现,到底怎么变?这里有几个小众的“金点子”
查看>>
AbstractQueuedSynchronizer 队列同步器(AQS)
查看>>
构建可读性更高的 ASP.NET Core 路由
查看>>
#学习笔记-sql# union实例及用法
查看>>
html-webpack-plugin
查看>>
Promise源码实现2
查看>>
警告WIN10用户!Disk Cleanup可能会误删下载活页夹
查看>>
java B2B2C Springcloud电子商务平台源码-eureka集群整合config配置中心
查看>>
小猿圈python之打印输出九九乘法表
查看>>