为什么在Elasticsearch中需要“存储”:“是”?
我真的不明白为什么在核心类型链接中会在属性描述中说(例如,对于一个数字):
- store-设置为yes,将实际字段存储在索引中,否,则不存储它。默认为no(请注意, )
- index-如果不应为该值建立索引,则设置为no。在这种情况下,应该将store设置为yes,因为如果未对它进行索引和存储,
这两个大胆的部分似乎矛盾。如果"index":"no",
"store":"no"我仍然可以从源头获得价值。例如,如果我有一个包含URL的字段,这可能是一个好用法。没有?
我做了一个小实验,我有两个映射,一个映射到一个字段,另一个映射"store":"yes"
到"store":"no"
。
在两种情况下,我仍然可以在查询中指定:
{"query":{"match_all":{}}, "fields":["my_test_field"]}
我得到了相同的答案,返回了现场。
我认为,如果"store"
设置为"no"
true ,则意味着我无法撤消特定领域的工作,而必须获得全部内容_source
并在客户端进行解析。
那么,什么好处是在有设置"store"
到"yes"
?仅当我从"_source"
字段中明确排除该字段时,才有意义吗?
回答:
我认为,如果将“ store”设置为“ no”,则意味着我无法检索特定字段,而必须获取整个_source并在客户端进行解析。
当未存储字段(默认)并且_source
启用该字段(也是默认值)时,这就是elasticsearch为您所做的。
您通常将字段发送给elasticsearch,因为您要在其上搜索或检索它。但是,确实,如果您没有显式存储字段并且没有禁用源,您仍然可以使用来检索字段_source
。这意味着在某些情况下,具有未索引或未存储的字段实际上可能有意义。
当您存储字段时,这是在底层的lucene中完成的。Lucene是一个倒排索引,它允许快速的全文本搜索并在给定文本查询的情况下返回文档ID。除了倒排索引之外,Lucene还具有某种类型的存储,可以在其中存储字段值,以便在给定文档ID的情况下进行检索。您通常将希望返回的字段存储在lucene中作为搜索结果。Elasticsearch不需要存储要返回的每个字段,因为默认情况下它始终存储您发送给它的每个文档,因此它始终能够返回您发送给它的所有内容作为搜索结果。
仅在少数情况下,将字段显式存储在lucene中可能会很有用:_source
禁用字段时,或者当我们希望避免对其进行解析时,即使解析是由Elasticsearch自动完成的。请记住,尽管从Lucene检索许多存储的字段可能需要每个字段一个磁盘查找,而_source
仅从Lucene
检索并解析它以检索所需的字段只是单个磁盘查找,并且在大多数情况下会更快。
以上是 为什么在Elasticsearch中需要“存储”:“是”? 的全部内容, 来源链接: utcz.com/qa/413164.html