elasticsearch ES 6.x,联接类型,当父文档和子文档具有相同字段时。将其存储为一个字段还是两个字段?
正如我们所知,ES6.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} 问题是:当父项和子项具有相同名称的字段时,我应该将其存储在一个或两个字段中吗?我相信您可以双向选择。选择哪一种取决于您希望对父文档和子文档执行何种查询 如果重复使用字段名 比方说,您使用名称重用字段名
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
查询似乎不会影响选择,因为它们会自动区分父项和子项
如果执行大量以相同方式查询父文档和子文档的查询,请选择重复使用字段
否则,不要重复使用字段名
希望有帮助