当前位置:   article > 正文

es父子结构查询_elasticsearch 学习之父子关联查询 parent/child

es parent child

parent-child 关系

关联关系,可以为两个完全分开的文档,可以将一种文档类型以一对多的关系关联到另一个上

优点:

1.parent文档的更新不需要重新为子文档重建索引

2.对子文档进行添加,更改,删除操作室不会影响父文档或者其他子文档

3.子文档可以被当做查询请求的结果返回

Elasticsearch 维护了一个父文档和子文档的映射关系,得益于这个映射,父-子文档关联查询操作非常快。但是这个映射也对父-子文档关系有个限制条件:父文档和其所有子文档,都必须要存储在同一个分片中。

parent-child映射

为了建立parent-child关系,需要在索引创建的时候指定父文档

建立索引

PUT /company

{

"mappings": {

"dept": {},

"user": {

"_parent": {

"type": "dept"

}

}

}

}

通过 child 找到 parents

查询child返回的是parents文档

查询child  uname为 "里斯"的员工 部门

GET company/dept/_search

{

"query": {

"has_child": {

"type": "user",

"query": {

"match": {

"uname":"里斯"

}

},"inner_hits":{} //inner_hits可以将子文档带出 默认只查3条 可以自己设置 size,from

} } }

has_child 查询可以匹配多个 child 文档,每个都有相应的相关分数。这些分数如何化归为针对 parent 文档的单独分数取决于 score_mode 参数。默认设置是 none,这会忽视 child 分数并给 parents 分配了 1.0 的分值,不过这里也可以使用 avg,min,max 和 sum

开发部的下的员工王五评分更高,会更好匹配

GET company/dept/_search

{

"query": {

"has_child": {

"type": "user",

"score_mode": "max",   //默认为none  此时明显快于其他模式,因为不需要计算每个child文档的分值,只有在乎分值的时候才需要设置

"query"

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/456695
推荐阅读
相关标签
  

闽ICP备14008679号