我们知道,ES6.x将父类型和子类型存储在一种文档中。
我的模特是:
parent: {id, name, point}
child: {id, point}
设计文件有什么建议?
{id, name, point} or {id, name, point, child_point}
问题是:当父母和孩子的字段名称相同时,我应该将其存储在一个或两个字段中吗?
答案 0 :(得分:0)
我相信您可以双向使用。哪一个取决于您要针对父文档和子文档执行哪种查询。
比方说,您使name
重用了字段名。
您可以通过name
查询所有文档-父文档将与子文档一起返回。这可能是不可取的(或可能不是,取决于您想要的)。
为了仅按名称查询父文档或子文档,您仍然可以像这样使用must
:name: X AND type: parent
(或孩子)。
如果重用text
字段,则相关性评分可能会受到影响-因为具有相同名称的字段将使用相同的倒排索引,并且parent
令牌频率将影响{{1} }文字搜索。
比方说,您决定父文档仅填充“父域”,子文档-仅决定“子域”。例如,在父母中,您将使用child
;在孩子中,您将使用name
。
在这种情况下,仅按名称搜索父文档,使用一个查询childName
就足够了。要按名称搜索子文档:name: X
。
如果您需要混合结果(父文档和子文档在同一结果集中),您仍然可以通过should
组合这两个查询。
用于父级childName: X
的全文本搜索的索引不会影响name
中的那个。
childName
和has_child
查询似乎不会影响选择,因为它们会自动区分父级和子级。
如果您执行许多以相同方式查询父文档和子文档的查询,请选择字段的重用。
否则,请勿重复使用字段名称。
希望有帮助!