ElasticSearch如何存储_source字段和其他元字段

时间:2015-11-18 20:38:46

标签: elasticsearch lucene

请关于ES索引结构的问题:

(1)_source是Lucene中的一个字段,如果是这样,Lucene如何存储它,它是一个Key-Value存储而不是倒排索引。

(2)ES _id是Lucene中的一个字段,还是其他Key-Value存储中的字段。如果我使用md5作为我的doc的id并在我的doc中创建md5字段,哪一个查询会更快,即搜索_id或搜索md5更快?

(3)ES _type是Lucene中的一个字段,如果是这样,为什么ES中的不同_type可以具有相同的doc _id。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

(1)存储包含原始JSON的_source field,以便可以获取(通过get requestsscripts等)。但是,未编入索引,因此无法搜索。

(3)每个文档都有_type_id字段。两者一起形成_uid field,其值为{type}#{id}_uid_type字段都已编入索引,可用于查询,聚合,脚本和排序。 _uid字段也是可以在不同_id中使用相同_type的原因(即_uid始终是唯一的)。但是,_id字段未编入索引,因为其值可以从_uid字段派生。

(2)您可以检索文档by its _id,这将始终比通过任何其他字段搜索文档更快,无论该字段是否为MD5。但值得注意的是,在ES 2.0之前,cleverly pick the right IDs对于您的文档非常重要。从2.0开始,它已成为less of a concern,你可以选择你喜欢的任何ID。