- 浏览: 697687 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (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配置文件编写和加载方法介绍
在《Elasticsearch 父子关系维护和检索案例分享》一文中介绍了Elasticsearch 父子关系维护和检索的基本功能,本文接着上篇文档,分享同时返回父子数据Elasticsearch 关联查询案例。
本文涉及到的技术点:
1.准备工作
参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端
2.定义带inner_hits的dsl检索语句
在dsl配置文件-esmapper/indexparentchild.xml中增加两个dsl检索语句:
hasChildSearchReturnParent2ndChildren 演示在按照雇员信息检索公司数据时,同时返回符合条件的公司下面的员工信息
hasParentSearchByCountryReturnParent2ndChildren 演示在按照公司信息检索雇员数据时,同时返回符合条件的雇员对应的公司信息
3.定义检索操作方法
在文件 ParentChildTest.java中增加以下方法
说明:
1) 通过ESInnerHitSerialThreadLocal指定了inner_hits中需要返回的数据对象类型
ESInnerHitSerialThreadLocal.setESInnerTypeReferences(Employee.class);//指定inner查询结果对于雇员类型
ESInnerHitSerialThreadLocal.setESInnerTypeReferences(Company.class);//指定inner查询结果对于公司类型
使用后需要清除:
ESInnerHitSerialThreadLocal.clean();//清空inner查询结果对于雇员类型
2) employee.getInnerHits()和company.getInnerHits()方法都是从ESBaseData继承的方法,bboss会自动将inner_hits检索到的父子关联数据设置到ESBaseData对象中,可以通过getInnerHits()方法获取到对应的数据;
3) ResultUtil.getInnerHits工具方法用于获取父/子关联检索对应的子/父的结果,方法的第二个参数对应inner_hits检索的类型和名称:
4.执行测试方法
通过junit,执行新的测试方法
5.参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-inner-hits.html#nested-inner-hits
6.开发交流
elasticsearch技术交流群:166471282
elasticsearch微信公众号:bbossgroups
本文涉及到的技术点:
- inner_hits的使用,通过inner_hits来同时返回父表数据和子表数据
- 父子双向数据检索及结果绑定和遍历
1.准备工作
参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端
2.定义带inner_hits的dsl检索语句
在dsl配置文件-esmapper/indexparentchild.xml中增加两个dsl检索语句:
hasChildSearchReturnParent2ndChildren 演示在按照雇员信息检索公司数据时,同时返回符合条件的公司下面的员工信息
hasParentSearchByCountryReturnParent2ndChildren 演示在按照公司信息检索雇员数据时,同时返回符合条件的雇员对应的公司信息
<!--以雇员姓名为条件检索公司信息并返回公司雇员信息--> <property name="hasChildSearchReturnParent2ndChildren"> <![CDATA[ { "query": { "has_child": { "type": "employee", "score_mode": "max", "query": { "match": { "name": #[name] ##雇员名称参数 } }, "inner_hits": {} ## 这是同时返回父子数据的关键所在 } } } ]]> </property> <!--根据公司所在的国家信息检索员工信息,同时返回员工所属的公司信息--> <property name="hasParentSearchByCountryReturnParent2ndChildren"> <![CDATA[ { "query": { "has_parent": { "type": "company", "query": { "match": { "country": #[country] ##国家代码参数 } }, "inner_hits": {} ## 这是同时返回父子数据的关键所在 } } } ]]> </property>
3.定义检索操作方法
在文件 ParentChildTest.java中增加以下方法
/** * 检索公司信息,并返回公司对应的雇员信息(符合检索条件的雇员信息) */ public void hasChildSearchReturnParent2ndChildren(){ ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/indexparentchild.xml"); Map<String,Object> params = new HashMap<String,Object>(); params.put("name","Alice Smith"); try { ESInnerHitSerialThreadLocal.setESInnerTypeReferences(Employee.class);//指定inner查询结果对于雇员类型 ESDatas<Company> escompanys = clientUtil.searchList("company/company/_search","hasChildSearchReturnParent2ndChildren",params,Company.class); long totalSize = escompanys.getTotalSize(); List<Company> companyList = escompanys.getDatas();//获取符合条件的公司 //查看公司下面的雇员信息(符合检索条件的雇员信息) for (int i = 0; i < companyList.size(); i++) { Company company = companyList.get(i); List<Employee> employees = ResultUtil.getInnerHits(company.getInnerHits(), "employee"); System.out.println(employees.size()); } } finally{ ESInnerHitSerialThreadLocal.clean();//清空inner查询结果对于雇员类型 } } /** * 通过公司所在国家检索雇员信息,并返回雇员对应的公司信息 */ public void hasParentSearchByCountryReturnParent2ndChildren(){ ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/indexparentchild.xml"); Map<String,Object> params = new HashMap<String,Object>(); params.put("country","UK"); try { ESInnerHitSerialThreadLocal.setESInnerTypeReferences(Company.class);//指定inner查询结果对于公司类型 ESDatas<Employee> escompanys = clientUtil.searchList("company/employee/_search","hasParentSearchByCountryReturnParent2ndChildren",params,Employee.class); List<Employee> employeeList = escompanys.getDatas();//获取符合条件的雇员数据 long totalSize = escompanys.getTotalSize(); //查看每个雇员对应的公司信息 for(int i = 0; i < employeeList.size(); i ++) { Employee employee = employeeList.get(i); List<Company> companies = ResultUtil.getInnerHits(employee.getInnerHits(), "company"); System.out.println(companies.size()); } } finally{ ESInnerHitSerialThreadLocal.clean();//清空inner查询结果对于公司类型 } }
说明:
1) 通过ESInnerHitSerialThreadLocal指定了inner_hits中需要返回的数据对象类型
ESInnerHitSerialThreadLocal.setESInnerTypeReferences(Employee.class);//指定inner查询结果对于雇员类型
ESInnerHitSerialThreadLocal.setESInnerTypeReferences(Company.class);//指定inner查询结果对于公司类型
使用后需要清除:
ESInnerHitSerialThreadLocal.clean();//清空inner查询结果对于雇员类型
2) employee.getInnerHits()和company.getInnerHits()方法都是从ESBaseData继承的方法,bboss会自动将inner_hits检索到的父子关联数据设置到ESBaseData对象中,可以通过getInnerHits()方法获取到对应的数据;
3) ResultUtil.getInnerHits工具方法用于获取父/子关联检索对应的子/父的结果,方法的第二个参数对应inner_hits检索的类型和名称:
List<Employee> employees = ResultUtil.getInnerHits(company.getInnerHits(), "employee"); List<Company> companies = ResultUtil.getInnerHits(employee.getInnerHits(), "company");
4.执行测试方法
通过junit,执行新的测试方法
@Test public void testFromJson(){ createIndice(); importFromJsonData(); hasChildSearchByBirthday(); this.hasChildSearchByName(); this.hasChildSearchByMinChild(); this.hasParentSearchByCountry(); this.hasChildSearchReturnParent2ndChildren();//本文对应的方法 this.hasParentSearchByCountryReturnParent2ndChildren();//本文对应的方法 }
5.参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-inner-hits.html#nested-inner-hits
6.开发交流
elasticsearch技术交流群:166471282
elasticsearch微信公众号:bbossgroups
发表评论
-
一组获取Elasticsearch 索引表所有文档API使用案例
2018-11-18 16:02 3178The best elasticsearch highle ... -
Elasticsearch Scroll和Slice Scroll查询API使用案例
2018-09-16 18:49 4005Elasticsearch Scroll和Slice Scro ... -
数据库数据导入Elasticsearch案例分享
2018-09-16 18:42 6419The best elasticsearch highleve ... -
Spring Boot整合ElasticSearch单/多集群案例
2018-07-07 20:12 9982Spring Boot整合ElasticSearch单个集群和 ... -
ElasticSearch DSL Script使用案例分享
2018-06-28 23:52 6360the best elasticsearch highleve ... -
Elasticsearch 6.3.0 SQL功能使用案例分享
2018-06-25 19:12 3414The best elasticsearch highleve ... -
数据库数据导入Elasticsearch案例分享
2018-06-21 22:56 433The best elasticsearch highleve ... -
ElasticSearch From-Size分页案例
2018-06-14 00:17 3516ElasticSearch From-Size分页案例 1. ... -
ElasticSearch客户端注解使用介绍
2018-05-30 00:19 2553The best elasticsearch highleve ... -
基于自定义配置文件初始化ElasticSearch客户端方法介绍
2018-05-24 18:56 1580基于自定义配置文件初始化ElasticSearch客户端方法介 ... -
Elasticsearch关键词高亮检索案例分享
2018-05-10 22:18 62931.准备工作 参考文档《集成Elasticsearch Res ... -
判断ElasticSearch索引Indice和索引类型是否存在
2018-05-05 23:54 8620The best elasticsearch highleve ... -
快速集成Elasticsearch Restful API案例
2018-04-26 14:27 3253The best elasticsearch highleve ... -
Elasticsearch source filter检索案例
2018-04-24 13:00 2349摘要: the best elasticsearch high ... -
Elasticsearch search after分页检索案例
2018-04-21 10:36 3202Elasticsearch search after分页检索案 ... -
Elasticsearch Delete/UpdateByQuery案例
2018-04-16 11:09 7506Elasticsearch Delete/UpdateByQu ... -
Elasticsearch Sliced Scroll分页检索案例分享
2018-04-02 18:28 3843Elasticsearch Sliced Scroll分页检索 ... -
Elasticsearch地理位置维护及检索案例分享
2018-03-31 21:36 1745Elasticsearch地理位置信息维护及检索案例分享 1 ... -
Elasticsearch Scroll分页检索案例分享
2018-03-28 20:40 4143Elasticsearch Scroll分页检索案例分享 1 ... -
Elasticsearch Mget、GetDocSource、索引部分更新案例分享
2018-03-25 08:55 12871.前期准备 参考文档《高性能elasticsearch OR ...
相关推荐
Elasticsearch(简称ES)是一款强大的开源搜索引擎,广泛应用于数据检索、分析和管理。作为分布式、RESTful风格的搜索和数据分析引擎,Elasticsearch能够提供实时、高可用性以及可扩展的搜索功能。在进行日常的数据...
在这个案例中,"account.json"是Elasticsearch官方提供的一个示例数据集,旨在帮助用户了解如何在Elasticsearch中处理和查询JSON格式的数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...
ElasticSearch数据导出 elasticsearch单文档数据导出 支持自定义查询 导出数据Json文件
Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene库构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。官方提供的测试数据集是检验Elasticsearch功能、性能和稳定性的关键资源,可以帮助...
在本文中,我们将深入探讨如何使用Spring Boot与Elasticsearch 7.6.2进行基本操作,包括创建索引、添加数据以及查询数据。Elasticsearch是一个强大的分布式搜索引擎,而Spring Boot是Java开发中的轻量级框架,两者...
ES 官方示例数据
Elasticsearch数据导出工具是一种高效实用的解决方案,它允许用户方便地从Elasticsearch(ES)集群中抽取数据,并将其导出到不同的目标,如MySQL数据库或本地文件系统。这款工具尤其适用于需要进行数据迁移、备份或...
综上所述,构建基于OSSEC、Logstash和Elasticsearch的大数据安全关联分析系统是一项复杂但极具价值的工作。通过合理配置各个组件之间的协作关系,并运用先进的数据分析技术,可以有效地提升企业的网络安全防护水平。
1. **Elasticsearch查询语句**:Elasticsearch支持丰富的查询语法,如match查询、term查询、range查询、bool组合查询等。封装查询语句意味着将这些复杂的查询结构转换为易于理解和使用的API。 2. **链式调用**:这...
Elasticsearch(以下简称 ES)是一种基于 Lucene 的开源搜索引擎,广泛应用于大数据时代的搜索、日志分析和数据集成等领域。下面是基于给定的文件信息,生成的相关知识点。 一、ES 索引结构设计 ES 索引结构设计是...
elasticsearch的客户端比较出名的就是elasticsearch head 和Kibana了, 但是elasticsearch head已经停止更新,且样式老旧,功能不全; 而Kibana虽功能全面,但是启动麻烦,大部分功能用不上,很不灵活,所以采用vite...
springboot整合elasticsearch7,进行数据同步。elasticsearch相关度查询、排序。高亮显示;自动补全等功能。代码仅供参考,代码中有具体的注释,可以根据代码及注释内容,对自己项目架构及业务进行修改、整合。
返回全部命中数据可能涉及到分页处理,因为Elasticsearch不鼓励一次性获取大量数据。`ElasticsearchUtil`可以提供一个`getAllHits(String index, String type, int from, int size)`方法,通过from和size参数实现...
在IT行业中,尤其是在大数据处理和搜索引擎领域,Elasticsearch(简称ES)是一个极其重要的工具。它是一个基于Lucene的开源全文搜索引擎,具有分布式、实时、高可扩展性以及灵活的数据模型等特点。PHP作为广泛使用的...
本文将深入探讨如何利用ArcGIS桌面工具将矢量数据(如.shp文件)导入到Elasticsearch(ES)中,以便进行高效的数据存储、检索和分析。 首先,ArcGIS桌面软件提供了丰富的地理数据处理功能,其中包括支持多种矢量...
因为你不知道将Hive的数据导入到了ElasticSearch后,数据量是否准确,所以需要钉钉报警校验ElasticSearch和Hive数据仓库内的数据质量,注意,这个项目打包后,最好另起一个进程调用,并且开始时间为文章1或者2最大...
Elasticsearch(ES)是一种基于Lucene的分布式、RESTful搜索和分析引擎,常用于实时大数据的检索和分析。在本场景中,我们有三个测试数据集,分别代表不同的应用场景和数据类型,它们是logstash-*,account,以及...
本地简单kettle抽MySQL数据到ES中 案例.zip本地简单kettle抽MySQL数据到ES中 案例.zip 本地简单kettle抽MySQL数据到ES中 案例.zip本地简单kettle抽MySQL数据到ES中 案例.zip 本地简单kettle抽MySQL数据到ES中 案例....
在本项目实战中,我们将探讨如何使用Java编程语言,结合Spark和Hive,将Hive中的数据高效地导入到ElasticSearch(ES)中,并利用ES的别名机制实现数据更新的平滑过渡。以下是对这个流程的详细解析: 1. **Hive数据...
关联查询在Elasticsearch中可以通过嵌套文档、父子文档或者多字段查询等方式实现。这些查询方式可以帮助我们处理复杂的数据关系,比如在一个文档中查找与之关联的其他文档。 文件名为"esutil"的类可能包含了上述...