我必须索引电子邮件,每封邮件都有一个收件人列表,如下所示:
{
"To":[{"name":"John", "email":"john@gmail.com"}, {"name":"Jane", "email":"jane@yahoo.com"}],
"Body": "Blah blah blah"
}
我想在正文中搜索并对仅包含多个收件人的邮件执行聚合。我尝试使用 token_count 数据类型和 value_count 聚合,但似乎都不适用。有没有办法在多值计数器上定义过滤器?
答案 0 :(得分:1)
实际上,我猜您的To
字段是nested
字段。如果您想真正将name
与email
地址相关联,我不明白为什么不应该这样。否则它只是一个名单列表和一个地址列表,它们之间没有任何关联。
如果您的字段是nested
字段,则其映射应为以下字段:
"To": {
"type": "nested",
"include_in_parent": true,
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
然后查询以搜索特定数量的电子邮件地址:
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": {
"script": {
"script": {
"inline": "doc['To.name'].size() > counter",
"params": {
"counter": 1
}
}
}
}
}
}
}
即使该字段不是nested
,上述查询仍适用。
答案 1 :(得分:0)
也许Script Query可以为您效劳:
"bool" : {
"must" : {
// query on body
...
},
"filter" : {
"script" : {
"script" : {
"inline" : "doc['To.name'].size() > param1"
"params" : {
"param1" : 1
}
}
}
}
}