在我在弹性搜索中索引的文档中,我有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?
答案 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_values
和stored=False
,但是如果保存了文档值,则仍可以保存索引的值。对于未分析的字符串和数字,文档值会自动打开,但是您可以通过在映射中将_source=False
设置为doc_values
来手动将其关闭。如果您将其关闭,则汇总这些字段将无效。
作为上述结果,即使直接通过False
查询,也可以检索基础值,即使stored=False
也是如此。有关how to do that is located here的信息。