org.apache.lucene.search.ScoreDoc.doc 应该是:Apache Lucene - Index File Formats 提到的:Document Numbers
文档 index 到Lucene中时,会生成 segment。document nubmer从0开始,每索引一篇文档到segment里面,document nubmer加1.segment内document number是唯一的。
Internally, Lucene refers to documents by an integer document number. The first document added to an index is numbered zero, and each subsequent document added gets a number one greater than the previous.
Most search applications using Apache Lucene assign a unique id, or primary key, to each indexed document. While Lucene itself does not require this (it could care less!), the application usually needs it to later replace, delete or retrieve that one document by its external id
2 个回复
hapjin
赞同来自: liuliuliu
文档 index 到Lucene中时,会生成 segment。document nubmer从0开始,每索引一篇文档到segment里面,document nubmer加1.segment内document number是唯一的。
而es中的 _id 只是ES 用来:get/delete 文档时 使用的一个id,与Lucene中的Document Number没有关系:
参考:choosing-fast-unique-identifier-uuid
Charele - Cisco4321
赞同来自:
如果你了解Lucene,你就会知道
本质上你操作的是一个目录,用IndexWriter来写,用IndexReader来读,用IndexSearcher来查。
这个目录是一个大的对像,里面包括许多Lucene的文档,一个文档有一个ID
这个是int类型的
ES里面,索引是有分片的,物理表现就是,每一个分片就是上面说的那个Lucene数据目录!
(当然,还包括ES自己的信息,比如状态信息什么的)
ES里面,索引是由文档组成的,一个文档可以在这个索引的任何分片里面。
这个文档号是string类型的,
这个号是用标识这个文档的,还用来进行hash入到哪个分片里面
(当然还有routing参与,这是另外的话题)
所以说没有任何关系。