我正在尝试创建一个 ElasticSearch 映射来索引电子邮件。我已经阅读了关于映射关系的 ES 文档。但是我对用什么来代表收件人感到困惑?
ES 文档只在真正需要并且所有其他选项都用尽时才使用父子关系强烈警告。特别是它说在有几个父母有很多孩子的情况下使用父子关系。
大多数电子邮件的收件人很少(少于 50 个),所以我的第一反应是使用“嵌套对象”。然而,偶尔会有那些..“全手”电子邮件,收件人可能会增加多达数千个收件人。
所以我的困境是 - 我的一般情况似乎非常适合嵌套对象,但我的边缘情况似乎非常适合父子关系。因此,如果有 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”的电子邮件,那么上面的电子邮件将不匹配。
所以马上,我觉得嵌套对象是正确的方案。然而,有时我会收到一封“全员”会议电子邮件,该电子邮件实际上是发送给公司中的每个人(数以万计的收件人)。
默认情况下,字段的限制是 1000,这就是为什么我担心嵌套对象可能无法处理这个问题。
这是嵌套对象 index.mapping.total_fields.limit 的默认限制的链接 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html#mapping-limit-settings