Elasticsearch:当index =“not_analyzed”时,我需要store =“yes”吗?

时间:2014-10-20 12:06:18

标签: elasticsearch

假设我有一个字段f1,其值为str(字符串)。

如果为字段index="not_analyzed"设置了f1,则将值str存储(作为条目)到反向索引中,因为它不会被拆分为标记。

如果我也设置store="yes",那么(恕我直言),值str将被记录另一个,所以最后两次。

那么,第一个问题,如果index="not_analyzed"store="yes"的附加价值是多少? 换句话说,由于第二个存储(由于store="yes")有成本,store="yes" 带来了哪些新功能,否则无法实现,即使 { {1}}已存储在倒排索引中?

恕我直言,如果字段不是字符串,而是日期(或长整数),则可能出现相同的情况。 假设我们有str字段f2"type": "date"

如果我也设置了"precision_step" : "0",那么(恕我直言),store="yes"的值最终将被记录两次。

那么,第二个问题,如果f2"precision_step"="0"的附加价值是多少? 换句话说,由于store="yes"引起的第二次存储有成本,store="yes"带来了哪些新功能?

PS:它与this question有关 事实上,这个新问题都是关于质疑前一个回答 NOT 的内容。

1 个答案:

答案 0 :(得分:3)

我认为你就像引用的SO帖子一样,把事情搞混了。索引和存储是两回事。您可以以非常快速的方式对令牌(无论是否已分析)进行索引,以便能够进行搜索。

它与将实际字段值存储在倒排索引中无关。这些是单独的操作和单独的事情。如果您不存储字段并禁用“_source”字段,那么即使您具有包含字段值的反向索引,您也只是使用ES进行搜索。如果您确实需要检索原始文档(或匹配字段中的原始值),则您不能。您需要_source或"store": yes

基本上,如果_source被禁用且"store"no,则您只能返回文档的_id。如果您需要内容,则转到辅助存储选项(例如,DB数据库),并根据_id获取实际内容。如果您的字段是“已分析”或“未分析”并不重要,只要您没有其他方式存储原始文档或原始字段值,则ES仅用于搜索(与商店和搜索相对)。

禁用“_source”时,应考虑以下所有内容。关于store=yes功能,一个是上面的 - 能够检索内容,而不仅仅是搜索。第二是突出显示。如果不进行存储,就无法在字段中突出显示令牌。

相关问题