2013-05-08 103 views
0

如果我创建它的第一个文档类型或放置映射,是否为每个字段创建索引?在elasticsearch中索引文档时创建了哪些索引

显然,如果我将“索引”设置为“已分析”或“未分析”,则字段会被索引。

有没有办法来存储一个字段,以便它可以被检索,但从来没有被搜索过?我想这会节省很多空间?如果我将其设置为“否”,这是否会节省空间?

我仍然可以通过此搜索,只需要更多的时间,或者这将是完全不可测量?

是否有一种方法可以在插入一些文档后创建字段索引并改变主意?

例如,我可能有一个映射:

{ 
"book":{"properties":{ 
    "title":{"type":"string", "index":"not_analyzed"}, 
    "shelf":{"type":"long","index":"no"} 
}}} 

,所以我希望能够通过标题进行搜索,还检索

回答

1

index:no的确会不会创建一个架子的书该字段的索引,以便节省一些空间。一旦你这样做了,你不能再搜索那个特定的领域。

也许在这方面也有用的是了解_source字段,默认情况下会返回该字段并包含您存储的所有字段。 http://www.elasticsearch.org/guide/reference/mapping/source-field/

至于你的第二个问题: 你不能半途改变主意。当您想要稍后索引特定字段时,您必须重新索引文档。

这就是为什么你可能想重新考虑设置索引:no等等。实际上,一个好的策略是不要为字段定义一个模式,除非你100%确定你需要一个非易失性存储器,例如,特定字段的默认分析器。否则,ES将使用通常可用的默认值。

+0

谢谢!我能以相反的方式做到吗?伊夫告诉他索引一个领域,但想抹掉索引,但仍然能够恢复价值。 用例是,我有一个网址作为一个领域,索引这似乎很愚蠢。 – eran 2013-05-08 21:54:33

+1

也许它的语义,但我不知道我明白。如果你索引一个字段,然后想删除索引,那么你不能。相反,您必须事先决定不索引该字段。你仍然可以检索这个值(当你明确的存储这个字段时,或者甚至没有这样做,因为它默认是'_source'的一部分。如果你的意思是你仍然想通过没有索引的字段进行搜索,那么no:这就是索引是的,你不能有你的蛋糕,也不能吃太多:) – 2013-05-09 09:24:53

+0

你已经回答了我的问题。 有两种情况: 1.我开始索引字段,但决定我不需要通过它进行搜索。 2.我开始不索引该字段,然后发现我想按照它进行搜索,因此想索引它 在这两种情况下,都需要重新映射doc_type并重新索引,正如我对您的理解。 谢谢! – eran 2013-05-09 13:13:27