【问题标题】:What are segments in Lucene?Lucene 中的段是什么?
【发布时间】:2011-02-11 19:18:31
【问题描述】:

Lucene 中的段是什么

细分有什么好处?

【问题讨论】:

    标签: lucene segment


    【解决方案1】:

    段很简单a section of the index。这个想法是,您可以通过创建一个仅包含新文档的新段来将文档添加到当前正在提供服务的索引中。这样,您就不必为了向索引中添加新文档而频繁地重建整个索引而费时费力。

    【讨论】:

      【解决方案2】:

      Lucene 索引被分成更小的块,称为段。每个段都是它自己的索引。 Lucene 按顺序搜索所有这些。

      当一个新的写入器被打开和一个写入器提交或关闭时,一个新的段被创建。

      使用此系统的优点是您无需在创建段后修改其文件。当您在索引中添加新文档时,它们会被添加到下一个片段中。以前的段永远不会被修改。

      删除文档是通过在文件中简单地指出一个段的哪个文档被删除来完成的,但在物理上,该文档始终保留在段中。 Lucene 中的文档并没有真正更新。发生的情况是文档的先前版本在其原始段中被标记为已删除,并且文档的新版本被添加到当前段中。这通过在发生更改时不断修改其内容来最大限度地减少损坏索引的机会。它还允许在不同机器之间轻松备份和同步索引。

      但是,在某些时候,Lucene 可能会决定合并某些段。此操作也可以通过优化触发。

      【讨论】:

      • 这意味着每个段文件中都有术语字典?如果两个段都有“搜索,我”这个词,它们会有两个字典吗?它会使每个段变得如此之大以存储重复的术语?
      【解决方案3】:

      其他人已经回答了细分市场的好处。我将包含一个 Lucene 索引的 ascii 图。

      Lucene 段

      Lucene 段是索引的一部分。每个段由几个索引文件组成。如果您查看这些文件中的任何一个,您会发现它包含 1 个或多个 Lucene documents

      +- 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) ----------------------+  |
      |  |                                              |  |
      |  +----------------------------------------------+  |
      +----------------------------------------------------+
      

      参考

      Lucene in Action Second Edition - July 2010 - Manning Publication

      【讨论】:

      • 段不保存文档本身,它只是倒排索引的一部分,其中包含对文档本身的引用(例如id)。
      • Hello BornToCode ... 通过尝试回答问题的两个部分,我使用了包含两个含义的单词文档 - 字段序列和源文档。我刚刚留下了使用“文档”a Lucene document which is a sequence of fields 唯一含义的 ascii 图。我希望这更清楚?
      • 这更好.. 但如果我不阅读您的评论,我仍然会感到困惑。我认为要展示的要点是,在段内有包含倒排索引的术语以及包含这些术语的文档的参考 ID(如果我理解正确的话)。另外,您是从哪里获得“Lucene 文档”的概念的?
      • re:您从哪里得到“Lucene 文档”的概念? - 我从定义部分下的 Apache 的 Lucene 文档中获取它......它说:“索引包含一系列文档。文档是一系列字段。” lucene.apache.org/core/2_9_4/fileformats.html#Segments
      猜你喜欢
      • 2016-07-08
      • 2012-10-26
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多