gpt4 book ai didi

elasticsearch - elasticsearch中的source filtering、stored fields、doc values有什么区别?

转载 作者:行者123 更新时间:2023-12-02 22:47:43 27 4
gpt4 key购买 nike

我已经阅读了 source filtering 的文档, stored fields , 和 doc values .

In certain situations it can make sense to store a field. For instance, if you have a document with a title, a date, and a very large content field, you may want to retrieve just the title and the date without having to extract those fields from a large _source field


The stored_fields parameter is about fields that are explicitly marked as stored in the mapping, which is off by default and generally not recommended. Use source filtering instead to select subsets of the original source document to be returned.


All fields which support doc values have them enabled by default.

例子1

我有包含 title(短字符串)和 content (>1MB) 的文档。我想搜索匹配的标题,并返回标题。

  1. 使用源过滤
GET /_search
{ _source: "obj.title", ... }
  1. 使用存储字段
GET /_search
{ _source: false, stored_fields: ["title"], ... }
  1. 具有文档值
GET /_search
{_source: false, stored_fields: "_none_", docvalue_fields: "title", ... }

好吧

  • 源过滤请求是从磁盘读取完整的_source、标题和内容,然后应用过滤器并只返回标题,还是elasticsearch只从磁盘读取标题?
  • 源过滤请求是否会使用文档值?
  • 存储字段存储的是分析后的标记还是原始值?
  • 存储的字段或文档值比 _source 更有效还是更不有效?

最佳答案

Will the source filtered request read the full _source, title and content, from disk then apply the filter and return only the title, or will elasticsearch only read the title from disk?

您发送给 Elasticsearch 进行索引的文档将存储在名为 _source 的字段中(默认情况下)。因此,这意味着如果您的文档包含大量数据(例如在您的案例中的 content 字段中),完整的内容将存储在 _source 字段中。使用源过滤时,首先必须从 _source 字段中检索整个源文档,然后仅返回 title 字段。您在浪费空间,因为 content 字段实际上没有发生任何事情,因为您正在搜索 title 并仅返回 title 值。

在你的情况下,你最好不要存储 _source 文档,而只存储 title 字段(但它也有一些缺点,所以read this before you do ),基本上是这样的:

PUT index
{
"mappings": {
"_source": {
"enabled": false
},
"properties": {
"title": {
"type": "text",
"store": true
},
"content": {
"type": "text"
}
}
}
}

Will the source filtered request use doc values?

文档值默认在所有字段上启用,分析文本字段除外。如果您使用 _source 过滤,它不会使用 doc 值,如上所述,将检索 _source 字段并过滤您指定的字段。

Do stored fields store the analyzed tokens or the original value?

存储的字段存储了 _source 文档中存在的准确值

Are stored fields or doc values more or less efficient than _source?

doc_values 是一个不同的野兽,它更像是一种优化,以某种方式存储非分析字段的标记,以便于对这些值进行排序、过滤和聚合。

如果您不想存储完整的源代码而只想存储几个重要的字段(如上所述),则存储字段(默认为 false)也是一种优化。_source 字段本身是一个包含整个文档的存储字段。

关于elasticsearch - elasticsearch中的source filtering、stored fields、doc values有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57961582/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com