- 浏览: 1062719 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
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简洁高效的来完成这项任务。
举个例子,来说明分词后去重,会造成什么情况,假如我们的索引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简洁高效的来完成这项任务。
发表评论
-
elasticsearch异常信息汇总
2017-11-06 09:34 15581.IndexMissingException 异常信息 ... -
Elasticsearch的架构
2018-03-22 10:30 514为什么要学习架构? Elasticsearch的一些架构 ... -
怎么在Ubuntu上打开端口
2017-10-21 20:45 0Netstat -tln 命令是用来查看linux的端口使用情 ... -
Elasticsearch工作原理
2018-03-22 10:30 456一、关于搜索引擎 各 ... -
Elasticsearch的路由(Routing)特性
2017-10-11 10:41 0Elasticsearch路由机制介 ... -
Elasticsearch中的segment理解
2017-10-11 09:58 1907在Elasticsearch中, 需要搞清楚几个名词,如se ... -
Elasticsearch的路由(Routing)特性
2017-09-28 16:52 628Elasticsearch路由机制介绍 Elastics ... -
Elasticsearch 的 Shard 和 Segment
2017-09-28 16:05 1204Shard(分片) 一个Shard就是一个Lu ... -
开源大数据查询分析引擎现状
2017-09-22 03:04 841大数据查询分析是云计算中核心问题之一,自从Google在20 ... -
大数据处理方面的 7 个开源搜索引擎
2017-09-22 03:01 501大数据是一个包括一切 ... -
开源大数据查询分析引擎现状
2017-09-23 11:26 553大数据查询分析是云计算中核心问题之一,自从Google在2 ... -
elasticsearch 把很多类型都放在一个索引下面 会不会导致查询慢
2017-09-25 09:45 990主要看数据量ES索引优 ... -
腾讯大数据Hermes爱马仕的系统
2017-09-23 11:15 1006腾讯大数据最近做了几件事,上线了一个官方网站http:// ... -
配置高性能Elasticsearch集群的9个小贴士
2017-09-25 10:02 595Loggly服务底层的很多 ... -
Elasticsearch与Solr
2017-09-25 16:24 563Elasticsearch简介* Elasti ... -
大数据杂谈微课堂|Elasticsearch 5.0新版本的特性与改进
2017-09-26 09:57 812Elastic将在今年秋季的 ... -
ElasticSearch性能优化策略
2017-09-26 09:51 461ElasticSearch性能优化主 ... -
ES索引优化
2017-09-19 20:39 0ES索引优化篇主要从两个方面解决问题,一是索引数据过程;二是 ... -
分词与索引的关系
2017-09-19 20:33 0分词与索引,是中文搜索里最重要的两个技术,而且两者间是密不可 ... -
Elasticsearch中的segment理解
2017-09-19 20:30 0在Elasticsearch中, 需要搞清楚几个名词,如se ...
相关推荐
3. 自定义`StopFilter`:创建一个新的`Filter`类,继承自`Lucene`的`TokenFilter`,并在`incrementToken()`方法中实现敏感词的检查和过滤。 4. 应用`StopFilter`:在建立`Analyzer`实例时,使用自定义的`StopFilter`...
**正文** Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了强大的文本分析、索引和...通过深入学习官方API文档中的`docs`,开发者可以全面了解每个类和方法的具体用法,从而在实践中灵活运用。
3. 分词器(Tokenizer)与过滤器(Filter):Lucene使用分词器将文本拆分成可搜索的术语,然后通过过滤器进行进一步处理,如去除停用词、转换为小写等。 4. 倒排索引(Inverted Index):这是Lucene的核心数据结构...
- 使用Filter和QueryWrapperFilter可以过滤出满足特定条件的文档。 - 查询时可以使用Boosting来提高某些词元的权重,影响最终得分。 - 聚合(Faceting)功能可以对搜索结果进行分类统计,例如按商品类别或价格区间。...
b) 常用方法: TopDocs search(Query query, Filter filter, int n); //执行查询。n指的是最多返回的Document的数量。 Document doc(int 文件内部编号); //根据文档的内部编号获取到该Document void close(); //...
在标准的Analyzer中,我们通常会看到对停用词(Stop Words)的处理,这是为了提高搜索效率和准确度,因为像“a”、“an”、“the”这样的常用词汇在搜索时通常不会带来实质性的区分。 StandardAnalyzer是Analyzer的...
3. **编写简单的索引和查询代码**:通过简单的示例代码来熟悉 Lucene 的基本使用方法。 #### 二、索引(Indexing) **索引** 是 Lucene 的核心功能之一。它是指将文档转换为可搜索的形式并存储的过程。索引过程中,...
根据所提供的标题、描述以及部分模糊的内容,我们可以深入探讨Java中一些常用的过滤器类型及其应用。 ### 1. 认证过滤器(Authentication Filters) 认证过滤器是Web应用程序中最常见的过滤器之一,主要用于身份...
Java EE常用框架 WebService 介绍 基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用 术语 XML. Extensible Markup Language -扩展性标记语言 WSDL – ...
Porter Stem Filter是Lucene中用于词干提取的一种实现。下面是一个简单的示例代码,展示了如何使用Porter Stem Filter进行分词和词干提取: ```java public class PorterStemAnalyzer extends Analyzer { @...
2. **索引(Index)**:Lucene 使用倒排索引,将文档中的单词转换为词项(Term),然后为每个词项创建一个倒排表,列出包含该词项的所有文档及其位置。 3. **分词器(Tokenizer)与分析器(Analyzer)**:分词器负责...
在Java中,可以使用开源库如Apache Lucene或Stanford NLP来完成这些任务。例如,`Lucene`提供了分词器(Tokenizer)和过滤器(Filter)类,用于进行基本的预处理操作。 接着,我们需要构建词汇表(Vocabulary)。这...
本篇文章将带你深入学习如何在Solr5中集成并使用MMSeg4J分词器,提升中文处理能力。 首先,我们来了解一下MMSeg4J。这是一个高效、灵活的Java实现的中文分词库,它采用了基于词频的动态最大匹配算法(MaxMatch),...
- **Java 8 Stream API**:Stream API引入了强大的函数式编程能力,可以通过`filter()`、`findFirst()`等方法实现高效的搜索操作。 3. **Lucene** - **Apache Lucene** 是一个高性能、全文本搜索库,Java开发者...
在实际项目中,可能会用到一些开源库,例如`Apache Lucene`或`Google's Protocol Buffers`,它们提供了丰富的文本处理和数据存储功能。对于C++,还可以使用`Boost`库来增强编程效率。 综上所述,解决“根据相似度去...
在Solr中实现拼音检索,主要是通过插件机制,其中最常用的是"Pinyin4j"库。Pinyin4j是一个Java库,用于处理中文字符并将其转换为拼音。它可以将每个汉字转换为对应的拼音表示,这对于构建基于拼音的索引和查询非常...
复合查询、filter查询和高亮查询都是在满足复杂查询需求时常用的查询方法。聚合查询则能够提供对数据的统计分析功能,比如去重计数查询和范围统计。 最后,ES的地图经纬度搜索介绍了ES如何处理地理位置信息的查询。...
- **Filter、Listener**:学习Servlet过滤器(Filter)和监听器(Listener)的使用方法。 - **JSP开发**(重点): - **JSP语法和标签**:掌握JSP页面的编写,了解JSP指令和动作标签。 - **自定义标签**:学习如何...