elasticsearch ElasticSearch能否纯粹用于聚合?,elasticsearch,lucene,elasticsearch,Lucene" /> elasticsearch ElasticSearch能否纯粹用于聚合?,elasticsearch,lucene,elasticsearch,Lucene" />

elasticsearch ElasticSearch能否纯粹用于聚合?

elasticsearch ElasticSearch能否纯粹用于聚合?,elasticsearch,lucene,elasticsearch,Lucene,在我当前的用例中,我使用ElasticSearch作为文档存储,在此基础上我构建了一个分面搜索特性 缔约国声明如下: 排序、聚合和访问脚本中的字段值需要不同的数据访问模式 文档值是在文档索引时构建的磁盘上的数据结构,这使得这种数据访问模式成为可能。它们存储与_源相同的值,但以面向列的方式存储,这对于排序和聚合更为有效 这是否意味着聚合不依赖于索引?如果是,是否建议通过设置{“index”:“no”}来防止字段被全部索引 这是一个很小的偏差,但设置已启用从何而来?它与索引有什么不同 更广泛地说,如

在我当前的用例中,我使用ElasticSearch作为文档存储,在此基础上我构建了一个分面搜索特性

缔约国声明如下:

排序、聚合和访问脚本中的字段值需要不同的数据访问模式

文档值是在文档索引时构建的磁盘上的数据结构,这使得这种数据访问模式成为可能。它们存储与_源相同的值,但以面向列的方式存储,这对于排序和聚合更为有效

这是否意味着聚合不依赖于索引?如果是,是否建议通过设置{“index”:“no”}来防止字段被全部索引

这是一个很小的偏差,但设置已启用从何而来?它与索引有什么不同

更广泛地说,如果聚合是我想要的,我应该使用ElasticSearch吗?我是否应该选择其他解决方案,如MongoDB?如果是,性能考虑因素是什么


救命啊

完全可以使用Elasticsearch来聚合数据。我见过几次这样的设置。例如,在过去的一个项目中,我们会索引数据,但我们只会运行聚合来构建财务报告,而且我们很少需要获取文档/点击。99%的用例只是聚合数据

如果您有这样一个用例,那么您可以将映射调整为

启用
的作用是决定是否为数据编制索引。默认情况下为true,但如果将其设置为false,您的数据将简单地存储(在
\u source
)但被分析器完全忽略,即它不会被分析、标记和索引,因此,它将不可搜索,您将能够检索
\u source
,但不能搜索它。如果需要使用聚合,则
已启用
需要为true(默认值)

store
参数用于决定是否要存储字段。默认情况下,字段值被编入索引,但不会存储,因为它已经与
\u source
一起存储,您可以使用source filtering检索它。对于聚合,此参数不起任何作用

如果您的用例只是关于聚合,您可能会尝试设置
\u source:false
,即根本不存储
\u source
,因为您所需要的只是索引字段值以聚合它们,但这很少是一个好主意

因此,为了回答您的主要问题,聚合确实依赖于索引,但是用于聚合的(doc-)值被写入专用文件中,其内部结构比从索引访问数据以构建聚合更高效和优化

如果您使用的是ES 1.x,请确保所有要聚合的字段(分析字符串和布尔字段除外)都设置为true

如果您使用的是ES 2.x,
doc\u值
默认为true,因此您不需要做任何特殊的操作

更新:


值得注意的是,聚合依赖于(即
.dvd
.dvm
Lucene文件),这些文件基本上包含与反向索引中相同的信息,但以面向列的方式组织,这使得聚合更有效。

感谢您的响应。但我仍然不明白,如果聚合使用的是磁盘级数据结构,那么它们是如何依赖于索引的。索引由一组:-)组成,其中一些加载到堆中,一些加载到文件缓存中,但所有内容(包括聚合)都是如此最终存储在一个或多个文件中的数据结构中。这很有意义。需要明确的是,聚合依赖于正向索引,而不是反向索引,反向索引用于搜索。但这两种指数都存在于细分指数中。听起来不错?聚合依赖于(
.dvd
.dvm
文件),这些文件基本上与反向索引中的信息相同,但以面向列的方式组织,这使得聚合效率更高。非常感谢此外,如果您可以编辑答案以包含上述信息,也会有所帮助。