Elasticsearch 中 _source 和 _all 有什么区别

2024-01-26

占据所有领域的两人之间的区别让我难以理解。

如果我的文档有:

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

  }
}

我明白那个_source是一个包含所有字段的字段。但也如此_all? 这是否意味着“name”被保存了几次(两次?_source and in _all),增加文档占用的磁盘空间?

“名称”是否为字段存储一次,为_source,并且一次为_all? “数字”怎么样,它存储在_all,即使不在_source?

我应该什么时候使用_source在我的查询中,当_all?

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


这和lucene中索引字段和存储字段的区别几乎是一样的。

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

The _source字段旨在存储最初发送到elasticsearch的整个源文档。它用作搜索结果,进行检索。你无法搜索它。事实上它是lucene中的一个存储字段并且没有索引。

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

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

你永远不会使用_source查询中的字段,仅当您返回结果时,因为这是 elasticsearch 默认返回的结果。有一些功能取决于_source字段,如果禁用它,您就会丢失该字段。其中之一是更新API http://www.elasticsearch.org/guide/reference/api/update/。另外,如果禁用它,您需要记住配置为store:yes在映射中您想要作为搜索结果返回的所有字段。我宁愿说不要禁用它,除非它打扰你,因为它在很多情况下确实很有帮助。另一种常见的用例是当您需要重新索引数据时;你可以从elasticsearch本身检索所有文档,然后将它们重新发送到另一个索引。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch 中 _source 和 _all 有什么区别 的相关文章

随机推荐