Lucene 中的段是什么?
细分市场有什么好处?
Lucene 索引被分成更小的块,称为段。每个段都是它自己的索引。Lucene 按顺序搜索所有这些。
当一个新的 writer 打开和一个 writer 提交或关闭时,一个新的段被创建。
使用此系统的优点是您无需在创建段后修改其文件。当您在索引中添加新文档时,它们会被添加到下一个片段中。以前的段永远不会被修改。
删除文档是通过在文件中简单地指出一个段的哪个文档被删除来完成的,但在物理上,该文档始终保留在该段中。Lucene 中的文档并没有真正更新。发生的情况是文档的先前版本在其原始段中被标记为已删除,并且文档的新版本被添加到当前段中。这通过在发生更改时不断修改其内容来最大限度地减少损坏索引的机会。它还允许跨不同机器轻松备份和同步索引。
然而,在某些时候,Lucene 可能会决定合并一些段。此操作也可以通过优化触发。
段是非常简单的索引的一部分。这个想法是,您可以通过创建一个仅包含新文档的新段来将文档添加到当前正在提供服务的索引中。这样,您就不必为了向索引中添加新文档而频繁地重建整个索引的昂贵麻烦。
其他人已经回答了细分市场的好处。我将包含一个 Lucene 索引的 ascii 图。
Lucene 段是索引的一部分。每个段由几个索引文件组成。如果您查看这些文件中的任何一个,您将看到它包含 1 个或多个Lucene 文档。
+- Index 5 ------------------------------------------+
| |
| +- Segment _0 ---------------------------------+ |
| | | |
| | +- file 1 -------------------------------+ | |
| | | | | |
| | | +- L.Doc1-+ +- L.Doc2-+ +- L.Doc3-+ | | |
| | | | | | | | | | | |
| | | | field 1 | | field 1 | | field 1 | | | |
| | | | field 2 | | field 2 | | field 2 | | | |
| | | | field 3 | | field 3 | | field 3 | | | |
| | | | | | | | | | | |
| | | +---------+ +---------+ +---------+ | | |
| | | | | |
| | +----------------------------------------+ | |
| | | |
| | | |
| | +- file 2 -------------------------------+ | |
| | | | | |
| | | +- L.Doc4-+ +- L.Doc5-+ +- L.Doc6-+ | | |
| | | | | | | | | | | |
| | | | field 1 | | field 1 | | field 1 | | | |
| | | | field 2 | | field 2 | | field 2 | | | |
| | | | field 3 | | field 3 | | field 3 | | | |
| | | | | | | | | | | |
| | | +---------+ +---------+ +---------+ | | |
| | | | | |
| | +----------------------------------------+ | |
| | | |
| +----------------------------------------------+ |
| |
| +- Segment _1 (optional) ----------------------+ |
| | | |
| +----------------------------------------------+ |
+----------------------------------------------------+