赞
踩
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"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。