2016-11-20 47 views
-1

只要仔细检查一下:我认为这是不可能的,如果你想保持这样的信息以某种方式与索引目录中的索引文件捆绑在一起,你必须找出一种方法来自己做。从Lucene索引文件中计算分析器,版本等?

很明显,您可能在不同的目录中使用不同的分析器,而99%的时间在构建QueryParser时使用正确的分析器非常重要:如果您的QP具有不同的值,可能会出现各种不准确的错误结果。

同样,获取错误版本的索引文件可能会导致完全失败:再次,您可能会得到不准确的结果。

我想知道Lucene的人是否曾经考虑过将索引文件与这类信息捆绑在一起?同样我也想知道是否有人知道是否有Lucene衍生应用程序,比如Elasticsearch,可能包含这种机制?

实际上,只要查看索引的“_0”文件(_0.cfe,_0.cfs和_0.si),所有3个文件实际上都包含单词“Lucene”,看起来后面跟着版本信息。嗯...

PS 发生的其他相关的想法:说你索引某种文本文件(或1000文件)...并且你想保持你的索引是最新的每次它被打开。这样做的一个显而易见的方法是比较单个文件的上次修改日期与上次更新索引的时间:现在已过期的任何文档都需要从索引中删除与其相关的信息,然后必须重新编制索引。

这种需求必须始终与Lucene索引有关。在索引文件本身包含有用的“元信息”的情况下,通常如何处理它?

回答

0

任何人都对这个问题感兴趣:

它从我说,Version包含在索引文件出现。我查看了CheckIndex课程以及您可以从中获得的各种信息,例如CheckIndex.Status.SegmentInfoStatus,但没有找到方法来获得Version。我开始认为这是故意的,这个想法只是让Lucene根据需要处理索引的更新。如果是这样的话,不是一个完全令人满意的状态...

至于获得其他东西,如Analyzer类,似乎你必须自己实现这种“元数据”的东西,如果你想......这个可以通过在其他文件中包含文本文件来完成,或者可以使用IndexData类。当然你的Version也可以这样存储。

要编写这样的信息,请参阅IndexWriter.setCommitData()

要检索此类信息,您必须使用IndexReader的几个(?)子类之一,如DirectoryReader