ElasticSearch嵌套对象 - 获取具有各自值的唯一字段

时间:2017-06-16 09:39:00

标签: elasticsearch

我们对如何存储以下数据以便以后轻松检索它感到困惑。我们将有以下形式的一百万条记录:

{ 
  "width" : 720
  "height" : 200
  "coords" : [{
               "el" : "xyz",
               "x-y" : "100-50"
              },
              {
               "el" : "abc",
               "x-y" : "200-150"
              }]
},
{ 
  "width" : 1280
  "height" : 1000
  "coords" : [{
               "el" : "lmn",
               "x-y" : "400-50"
              },
              {
               "el" : "abc",
               "x-y" : "500-250"
              }]
}

我们需要运行哪种类型的聚合查询才能以下列形式获取数据?截至目前,我只能搜索返回唯一值及其各自计数(即出现次数)的查询。

{
 "el" : "xyz",
 "x-y" : ["100-50"]
},
{
 "el" : "abc",
 "x-y" : ["200-150","500-250"]
},
{
 "el" : "lmn",
 "x-y" : ["400-50"]
}

我们已经创建了一个映射,其中“coords”的类型为nested。 由于我们仍处于开发阶段,我们仍然可以更改映射以获得更好的性能和结果。

1 个答案:

答案 0 :(得分:0)

如果你有大数据并需要聚合嵌套对象(如coords),我建议你压扁你和x-y。您可以在映射中添加聚合字符串;

{ 
  "width" : 1280
  "height" : 1000
  "coords" : [{
               "el" : "lmn",
               "x-y" : "400-50"
              },
              {
               "el" : "abc",
               "x-y" : "500-250"
              }]
  "coords-foraggregation" : "lmn,400-500;abc,500-200;nnn,xxx..."
}

你可以为" coords-foraggregation"添加分析器。映射模型中的字段。(https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html)这种方式可能比聚合coords.el和coords.x-y更快......