请关于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。 提前谢谢!
答案 0 :(得分:1)
(1)存储包含原始JSON的_source
field,以便可以获取(通过get requests,scripts等)。但是,未编入索引,因此无法搜索。
(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。