子查询
编辑子查询编辑
返回其连接的子文档匹配提供查询的父文档。您可以使用连接字段映射在同一索引中的文档之间创建父子关系。
由于它执行连接,因此has_child
与其他查询相比速度较慢。随着指向唯一父文档的匹配子文档数量的增加,其性能会下降。搜索中的每个has_child
查询都可能显着增加查询时间。
如果您关心查询性能,请不要使用此查询。如果您需要使用has_child
查询,请尽可能少地使用它。
示例请求编辑
索引设置编辑
要使用has_child
查询,您的索引必须包含连接字段映射。例如
response = client.indices.create( index: 'my-index-000001', body: { mappings: { properties: { "my-join-field": { type: 'join', relations: { parent: 'child' } } } } } ) puts response
PUT /my-index-000001 { "mappings": { "properties": { "my-join-field": { "type": "join", "relations": { "parent": "child" } } } } }
示例查询编辑
GET /_search { "query": { "has_child": { "type": "child", "query": { "match_all": {} }, "max_children": 10, "min_children": 2, "score_mode": "min" } } }
has_child
的顶级参数编辑
-
type
- (必需,字符串) 为连接字段映射的子关系的名称。
-
query
- (必需,查询对象) 您希望在
type
字段的子文档上运行的查询。如果子文档匹配搜索,则查询将返回父文档。 -
ignore_unmapped
-
(可选,布尔值) 指示是否忽略未映射的
type
,而不是返回任何文档,而是返回错误。默认为false
。如果为
false
,则 Elasticsearch 会在type
未映射时返回错误。您可以使用此参数查询可能不包含
type
的多个索引。 -
max_children
- (可选,整数) 允许返回的父文档的匹配
query
的子文档的最大数量。如果父文档超过此限制,则将其从搜索结果中排除。 -
min_children
- (可选,整数) 匹配返回的父文档的查询所需的匹配
query
的子文档的最小数量。如果父文档未达到此限制,则将其从搜索结果中排除。 -
score_mode
-
(可选,字符串) 指示匹配子文档的得分如何影响根父文档的相关性得分。有效值为
-
none
(默认) - 不要使用匹配子文档的相关性得分。查询将为父文档分配
0
的得分。 -
avg
- 使用所有匹配子文档的平均相关性得分。
-
max
- 使用所有匹配子文档的最高相关性得分。
-
min
- 使用所有匹配子文档的最低相关性得分。
-
sum
- 将所有匹配子文档的相关性得分加在一起。
-
注意编辑
排序编辑
您无法使用标准排序选项对has_child
查询的结果进行排序。
如果您需要按子文档中的字段对返回的文档进行排序,请使用function_score
查询并按_score
排序。例如,以下查询按其子文档的click_count
字段对返回的文档进行排序。
GET /_search { "query": { "has_child": { "type": "child", "query": { "function_score": { "script_score": { "script": "_score * doc['click_count'].value" } } }, "score_mode": "max" } } }