我正在尝试创建一个ElasticSearch映射来索引电子邮件。我已经阅读了有关映射关系的ES文档。但是我对使用什么来代表收件人感到困惑?
ES文档提供强烈警告,仅在确实需要使用父子关系且所有其他选项都用尽时才使用父子关系。特别是当有少数父母有很多孩子时,它会说使用父子关系。
大多数电子邮件都没有收件人(少于50个),所以我的第一直觉是使用" Nested-Object"。然而有一段时间有那些......"所有的手"收件人可以上传多达数千名收件人的电子邮件。
所以我的困境是 - 我的一般情况似乎是Nested-Object的理想选择,但我的边缘情况似乎是父子关系的理想选择。因此,如果有经验的ElasticSearch用户已经通过这个,我很想知道您用于此的映射关系和推理。
===更多细节===
我不会更新,只是为搜索编制索引。
每个条目代表一封电子邮件
每封电子邮件都包含收件人
我希望能够通过搜索收件人来检索电子邮件。
每个收件人都有displayName和emailAddress,我希望这个关系完好无损。
例如:
{
"Subject" : "my first email",
"Sender" : {
"DisplayName" : "Sender Doe",
"EmailAddress" : "Sender.Doe@TheCompany.com"
},
"Recipient" : {[
{
"DisplayName" : "John Who",
"EmailAddress" : "john.who@hisCompany.com"
},
{
"DisplayName" : "Jane Doe",
"EmailAddress" : "jane.doe@hisCompany.com"
}
]}
}
在上面的示例中,如果我要搜索收件人姓名包含" John"和" Doe"然后上面的电子邮件将不匹配。
因此,我觉得嵌套对象是正确的方案。但是有时我会得到一个" all-hands"会议电子邮件,基本上发送给公司的每个人(成千上万的收件人)。
默认情况下字段的限制为1000,这就是为什么我担心嵌套对象可能无法处理此问题。
以下是嵌套对象的默认限制的链接 index.mapping.total_fields.limit https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html#mapping-limit-settings