elasticsearch ES 6.x,联接类型,当父文档和子文档具有相同字段时。将其存储为一个字段还是两个字段?,elasticsearch,elasticsearch" /> elasticsearch ES 6.x,联接类型,当父文档和子文档具有相同字段时。将其存储为一个字段还是两个字段?,elasticsearch,elasticsearch" />

elasticsearch ES 6.x,联接类型,当父文档和子文档具有相同字段时。将其存储为一个字段还是两个字段?

elasticsearch ES 6.x,联接类型,当父文档和子文档具有相同字段时。将其存储为一个字段还是两个字段?,elasticsearch,elasticsearch,正如我们所知,ES6.x将父类型和子类型存储在一个文档中 我的模型是: parent: {id, name, point} child: {id, point} 设计es文件的建议是什么 {id, name, point} or {id, name, point, child_point} 问题是:当父项和子项具有相同名称的字段时,我应该将其存储在一个或两个字段中吗?我相信您可以双向选择。选择哪一种取决于您希望对父文档和子文档执行何种查询 如果重复使用字段名 比方说,您使用名称重用字段名

正如我们所知,ES6.x将父类型和子类型存储在一个文档中

我的模型是:

parent: {id, name, point}
child:  {id, point}
设计es文件的建议是什么

{id, name, point} or {id, name, point, child_point}

问题是:当父项和子项具有相同名称的字段时,我应该将其存储在一个或两个字段中吗?

我相信您可以双向选择。选择哪一种取决于您希望对父文档和子文档执行何种查询

如果重复使用字段名 比方说,您使用
名称
重用字段名

您可以按
名称
查询所有文档-父文档将与子文档一起返回。这可能是不可取的(也可能不是,取决于您想要什么)

为了按名称查询仅父文档或仅子文档,您仍然可以使用如下命令:
name:X和type:parent
(或child)

如果重用
文本
字段,相关性评分可能会受到影响-因为同名字段将使用相同的反向索引,
父项
标记频率将影响
子项
文本搜索的相关性

如果不重用字段名 假设您决定父文档只填充“父字段”,而子文档只填充“子字段”。例如,在父级中使用
name
,在子级中使用
childName

在这种情况下,只需使用一个查询即可按名称搜索父文档:
name:X
。要按名称搜索独子文档:
childName:X

如果需要混合结果(同一结果集中的父文档和子文档),您仍然可以通过一个查询组合这两个查询

父项的
名称
的全文搜索索引不会影响
子项名称
之一

那么,选择哪一个呢?
has_child
has_parent
查询似乎不会影响选择,因为它们会自动区分父项和子项

如果执行大量以相同方式查询父文档和子文档的查询,请选择重复使用字段

否则,不要重复使用字段名

希望有帮助