- 浏览: 695142 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
摘要: the best elasticsearch highlevel java rest api-----bboss
Elasticsearch source filter检索案例分享
1.准备工作
参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端
先理解一下es source filter作用:通过在_source中指定includes和excludes,控制查询结果中哪些source字段要返回、哪些source字段不需要返回,source filter的dsl定义语法如下:
本文演示动态从外部传入includes和excludes实现source filter功能,适用于includes和excludes动态变化的source filter场景。
2.定义source filter dsl语句
首先,在DocumentCRUD 案例对应的dsl配置文件esmapper/demo.xml中添加searchSourceFilter:
3.定义source filter检索方法
在DocumentCRUD 中增加方法:
4.验证source filter功能
通过junit执行测试方法验证source filter功能:
执行结果:
5.参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-source-filtering.html
案例对应源码工程:
https://gitee.com/bboss/eshelloword
elasticsearch技术交流群:166471282
elasticsearch微信公众号:bbossgroups
Elasticsearch source filter检索案例分享
1.准备工作
参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端
先理解一下es source filter作用:通过在_source中指定includes和excludes,控制查询结果中哪些source字段要返回、哪些source字段不需要返回,source filter的dsl定义语法如下:
{ "_source": { "includes": [ "obj1.*", "obj2.*" ], "excludes": [ "*.description" ] }, "query" : { "term" : { "user" : "kimchy" } } }
本文演示动态从外部传入includes和excludes实现source filter功能,适用于includes和excludes动态变化的source filter场景。
2.定义source filter dsl语句
首先,在DocumentCRUD 案例对应的dsl配置文件esmapper/demo.xml中添加searchSourceFilter:
<property name="searchSourceFilter"> <![CDATA[{ #if($includes || $excludes) ## 只有指定了includes或者excludes才需要添加source filter "_source": { #if($includes ) ##设置includes filter "includes": [ #foreach($include in $includes) #if($velocityCount > 0),#end "$include" #end ] #if($excludes ),#end ##如果还存在排斥字段,则需要加一个逗号 #end #if($excludes ) ##设置excludes filter "excludes": [ #foreach($exclude in $excludes) #if($velocityCount > 0),#end "$exclude" #end ] #end }, #end "query": { "bool": { "filter": [ #if($applicationNames && $applicationNames.size() > 0) ##只有传递了需要检索的应用名称集合,才需要添加下面的条件 { ## 多值检索,查找多个应用名称对应的文档记录 "terms": { "applicationName.keyword":[ #foreach($applicationName in $applicationNames) #if($velocityCount > 0),#end "$applicationName" #end ] } }, #end { ## 时间范围检索,返回对应时间范围内的记录,接受long型的值 "range": { "agentStarttime": { "gte": #[startTime],##统计开始时间 "lt": #[endTime] ##统计截止时间 } } } ] } }, ## 最多返回1000条记录 "size":1000 }]]> </property>
3.定义source filter检索方法
在DocumentCRUD 中增加方法:
/** * SourceFilter检索文档 * @throws ParseException */ public void testSearchSourceFilter() throws ParseException { //创建加载配置文件的客户端工具,用来检索文档,单实例多线程安全 ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil(mappath); //设定查询条件,通过map传递变量参数值,key对于dsl中的变量名称 //dsl中有四个变量 // applicationName1 // applicationName2 // startTime // endTime Map<String,Object> params = new HashMap<String,Object>(); //设置applicationName1和applicationName2两个变量的值,将多个应用名称放到list中,通过list动态传递参数 List<String> datas = new ArrayList<String>(); datas.add("blackcatdemo2"); datas.add("blackcatdemo3"); params.put("applicationNames",datas); List<String> includes = new ArrayList<String>(); //定义要返回的source字段 includes.add("agentStarttime"); includes.add("applicationName"); params.put("includes",includes); List<String> excludes = new ArrayList<String>(); //定义不需要返回的source字段 excludes.add("contentbody"); excludes.add("demoId"); params.put("excludes",excludes); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置时间范围,时间参数接受long值 //说明: 也可以接受日期类型,如果传入Date类型的时间并且通过map传参,则需要手动进行日期格式转换成字符串格式的日期串,通过entity传参则不需要 params.put("startTime",dateFormat.parse("2017-09-02 00:00:00").getTime()); params.put("endTime",new Date().getTime()); //执行查询,demo为索引表,_search为检索操作action ESDatas<Demo> esDatas = //ESDatas包含当前检索的记录集合,最多1000条记录,由dsl中的size属性指定 clientUtil.searchList("demo/_search",//demo为索引表,_search为检索操作action "searchSourceFilter",//esmapper/demo.xml中定义的dsl语句 params,//变量参数 Demo.class);//返回的文档封装对象类型 //获取总记录数 long totalSize = esDatas.getTotalSize(); System.out.println(totalSize); //获取结果对象列表,最多返回1000条记录 List<Demo> demos = esDatas.getDatas(); //以下是返回原始检索json报文检索代码 // String json = clientUtil.executeRequest("demo/_search",//demo为索引表,_search为检索操作action // "searchSourceFilter",//esmapper/demo.xml中定义的dsl语句 // params); }
4.验证source filter功能
通过junit执行测试方法验证source filter功能:
@Test public void testSearchSourceFilter() throws ParseException { DocumentCRUD documentCRUD = new DocumentCRUD(); //删除/创建文档索引表 documentCRUD.testCreateIndice(); //添加/修改单个文档 documentCRUD.testAddAndUpdateDocument(); //批量添加文档 documentCRUD.testBulkAddDocument(); //不带sourceFilter检索文档 documentCRUD.testSearch(); //批量修改文档 documentCRUD.testBulkUpdateDocument(); //带sourcefilter的文档检索操作 documentCRUD.testSearchSourceFilter(); }
执行结果:
5.参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-source-filtering.html
案例对应源码工程:
https://gitee.com/bboss/eshelloword
elasticsearch技术交流群:166471282
elasticsearch微信公众号:bbossgroups
发表评论
-
一组获取Elasticsearch 索引表所有文档API使用案例
2018-11-18 16:02 3155The best elasticsearch highle ... -
Elasticsearch Scroll和Slice Scroll查询API使用案例
2018-09-16 18:49 3978Elasticsearch Scroll和Slice Scro ... -
数据库数据导入Elasticsearch案例分享
2018-09-16 18:42 6394The best elasticsearch highleve ... -
Spring Boot整合ElasticSearch单/多集群案例
2018-07-07 20:12 9954Spring Boot整合ElasticSearch单个集群和 ... -
ElasticSearch DSL Script使用案例分享
2018-06-28 23:52 6321the best elasticsearch highleve ... -
Elasticsearch 6.3.0 SQL功能使用案例分享
2018-06-25 19:12 3393The best elasticsearch highleve ... -
数据库数据导入Elasticsearch案例分享
2018-06-21 22:56 433The best elasticsearch highleve ... -
ElasticSearch From-Size分页案例
2018-06-14 00:17 3495ElasticSearch From-Size分页案例 1. ... -
ElasticSearch客户端注解使用介绍
2018-05-30 00:19 2521The best elasticsearch highleve ... -
基于自定义配置文件初始化ElasticSearch客户端方法介绍
2018-05-24 18:56 1573基于自定义配置文件初始化ElasticSearch客户端方法介 ... -
Elasticsearch关键词高亮检索案例分享
2018-05-10 22:18 62861.准备工作 参考文档《集成Elasticsearch Res ... -
判断ElasticSearch索引Indice和索引类型是否存在
2018-05-05 23:54 8602The best elasticsearch highleve ... -
快速集成Elasticsearch Restful API案例
2018-04-26 14:27 3249The best elasticsearch highleve ... -
Elasticsearch search after分页检索案例
2018-04-21 10:36 3192Elasticsearch search after分页检索案 ... -
Elasticsearch Delete/UpdateByQuery案例
2018-04-16 11:09 7485Elasticsearch Delete/UpdateByQu ... -
Elasticsearch返回父子数据关联查询案例
2018-04-13 12:36 4800在《Elasticsearch 父子关 ... -
Elasticsearch Sliced Scroll分页检索案例分享
2018-04-02 18:28 3834Elasticsearch Sliced Scroll分页检索 ... -
Elasticsearch地理位置维护及检索案例分享
2018-03-31 21:36 1741Elasticsearch地理位置信息维护及检索案例分享 1 ... -
Elasticsearch Scroll分页检索案例分享
2018-03-28 20:40 4138Elasticsearch Scroll分页检索案例分享 1 ... -
Elasticsearch Mget、GetDocSource、索引部分更新案例分享
2018-03-25 08:55 12841.前期准备 参考文档《高性能elasticsearch OR ...
相关推荐
在医疗数据分析中,Elasticsearch可以快速地索引和检索大量的患者信息、疾病诊断、药物信息、临床试验数据等,有助于提升医疗研究和决策效率。 XML是一种结构化数据格式,常用于存储复杂的数据结构。医疗数据往往...
ElasticSearch 是一款基于 Lucene 的分布式搜索和分析引擎,适用于全文检索、结构化检索及分析等场景。它提供了丰富的 API 接口,允许用户通过简单的 RESTful 方式来管理数据,并进行复杂的查询操作。 在 Elastic...
Elasticsearch 是一个开源的、基于 Lucene 的搜索引擎,被广泛应用于实时数据分析、全文检索、日志分析等领域。OSS(Open Source Software)版本是 Elasticsearch 的开源版本,包含了核心功能,适合于对商业特性需求...
Elasticsearch 查询语言(ES|QL)是一种新型的查询语言,专为Elasticsearch设计,它利用管道符号(`|`)将多个查询步骤串联起来,形成一种强大且灵活的数据检索与分析工具。ES|QL的设计目标是让用户能以简单直观的...
### Elasticsearch 简单而高效的管道查询语言 - ES|QL #### 一、ES|QL 概览 Elasticsearch 查询语言(ES|QL)是一种专门为Elasticsearch设计的查询语言,它提供了一种强大而直观的方式来过滤、转换和分析存储在...
7. **全文搜索引擎(Full-text Search Engines)**:虽然 Django 内置了一些搜索功能,但在复杂的应用中,可能需要更强大的全文搜索引擎,如 Elasticsearch 或 Solr。这些引擎可以提供更复杂的查询语法、更好的性能...
Elasticsearch是一个强大的分布式搜索引擎,基于Lucene库构建。在Java API中,与Elasticsearch交互,特别是进行搜索操作,主要是通过使用`QueryBuilder`对象来构造JSON格式的查询条件。本篇文章将深入探讨如何利用...
它可以从各种数据源接收数据,转换并将其发送到存储系统,如Elasticsearch,以便进行日志分析、监控和故障排查。将GeoLite2-City集成到Logstash中,可以增强日志数据的上下文,为每条记录添加来源IP的地理信息,这...
- **节点**: 单个Elasticsearch实例。 - **集群**: 多个节点的集合。 - **分片**: 指定索引被分割成的多个部分。 - **副本**: 指定分片的备份。 - **类型**: 文档的逻辑分类。 - **文档**: 数据的基本单位。 ...