在elasticsearch中,聚合如何在未存储的字段上工作

时间:2016-06-15 06:56:10

标签: elasticsearch aggregation

在我在弹性搜索中索引的文档中,我有6列a,b,c,d,e,f。我为所有设置了_source = false,对于列a,b,我设置了stored = true,对于列c,d,e,f,我设置了stored = false。

就我对elasticsearch中聚合的理解而言,聚合对查询结果起作用。但由于我只为列a,b设置了stored = true,我的搜索只返回列a,b。如果我想根据列c聚合怎么办?如果我设置stored = false,这个聚合将如何工作。要在列c上进行聚合,我是否必须为它设置stored = true?

1 个答案:

答案 0 :(得分:0)

您是正确的,为了进行聚合,必须将基础值保存在磁盘上的某个位置。它们不会保存在映射的标准Dim arra, pos, pos2, StrArray arra = VBA.Array(1001, 1011, 1021, 1031, 1041) StrArray = VBA.Array(16, 20, 10, 18, 14) pos = Application.Match(1041, arra, False) '>> 5 pos2 = Application.Match(1031, arra, False) '>> 4 'skipping the error checking for pos Debug.Print StrArray(pos) '>> "subscript out of range" [pos=5 but ubound(StrArray)=4] Debug.Print StrArray(pos2) '>> 14 [should be 18] Debug.Print StrArray(pos - 1) '>> 14 as expected Debug.Print StrArray(pos2 - 1) '>> 18 as expected stored字段中,而是保存在_source中。

这意味着即使您设置了doc_valuesstored=False,但是如果保存了文档值,则仍可以保存索引的值。对于未分析的字符串和数字,文档值会自动打开,但是您可以通过在映射中将_source=False设置为doc_values来手动将其关闭。如果您将其关闭,则汇总这些字段将无效。

作为上述结果,即使直接通过False查询,也可以检索基础值,即使stored=False也是如此。有关how to do that is located here的信息。