【问题标题】:what is the difference between _source and _all in ElasticsearchElasticsearch 中的 _source 和 _all 有什么区别
【发布时间】:2020-04-27 23:33:30
【问题描述】:

掌握所有领域的两者之间的区别让我无法理解。

如果我的文档有:

{"mydoc":
  {"properties":
      {"name":{"type":"string","store":"true"}},
      {"number":{"type":"long","store":"false"}},
      {"title":{"type":"string","include_in_all":"false","store":"true"}}

  }
}

我了解_source 是一个包含所有字段的字段。但是_all 也一样吗? 这是否意味着“名称”被保存了多次(两次?在_source_all),增加了文档占用的磁盘空间?

“名称”是否为字段存储一次,为_source 存储一次,为_all 存储一次? 那么“数字”呢,它是否存储在_all 中,即使不在_source 中?

什么时候应该在查询中使用_source,什么时候应该使用_all

我可以禁用_all 的用例是什么,然后会拒绝哪些功能?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    这和lucene中索引字段和存储字段的区别差不多。

    当您要搜索时使用索引字段,同时存储要作为搜索结果返回的字段。

    _source 字段用于存储最初发送到 elasticsearch 的整个源文档。它用作搜索结果,以进行检索。你不能搜索它。实际上它是 lucene 中的一个存储字段,没有被索引。

    _all 字段用于索引来自组成文档的所有字段的所有内容。您可以搜索它但永远不会返回它,因为它已编入索引但未存储在 lucene 中。

    没有冗余,这两个字段用于不同的用例并存储在 lucene 索引中的不同位置。 _all 字段成为我们所谓的倒排索引的一部分,用于索引文本并能够对其执行全文搜索,而 _source 字段仅作为 lucene 文档的一部分存储。

    您永远不会在查询中使用 _source 字段,只有在您返回结果时才会使用,因为这是 elasticsearch 默认返回的。有一些功能依赖于 _source 字段,如果禁用它,您将失去这些功能。其中之一是update API。此外,如果您禁用它,您需要记住在您的映射中配置为store:yes,您希望作为搜索结果返回的所有字段。我宁愿说不要禁用它,除非它打扰你,因为它在很多情况下真的很有帮助。另一种常见的用例是当您需要重新索引数据时;您可以从 elasticsearch 本身检索所有文档,然后将它们重新发送到另一个索引。

    另一方面,_all 字段只是一个默认的 catch all 字段,当您只想搜索所有可用字段并且不想在查询中全部指定它们时,可以使用该字段。它很方便,但我不会在生产中过分依赖它,最好在不同的字段上运行更复杂的查询,每个字段具有不同的权重。如果你不使用它,你可能想禁用它,在我看来,这将比禁用 _source 影响更小。

    【讨论】:

    • 与此同时,我在回答中添加了更多想法。 _all 字段默认设置为"index":yes,如果不使用include_in_all 选项,则与其他字段的映射无关。如果您不使用 _all 字段,我会完全禁用它,而不是将所有字段设置为 "include_in_all":false
    • 是的,它会节省一些磁盘空间,而不是我猜想禁用 _source 那么多。通常 lucene 中存储的字段是索引的最大部分。
    • 如果我没记错的话,倒排索引会为每个 -tuple + 每个包含所述元组的文档占用一些开销。简而言之:你节省的钱远远少于@Javanna 提到的禁用 _source
    • javanna:你提到 _all 默认设置为索引:是的,对吗?但是,如果我有一个使用雪球分析器的字段,它是否也会进入 _all。换句话说,在 _all 里面的单词应该已经按照我想要的方式被标记了,对吧?但是我测试了一下,好像没有用。
    • @Fei _all 有自己的分析器,当然它默认是索引的,但它不使用词干提取。它对索引到其中的所有部分使用相同的标准分析器。
    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2019-03-07
    相关资源
    最近更新 更多