Lucene java suggester for phrases without solr



>我有一个大的数据库,里面有二进制文档(如PDF)和一个没有TermFreqVector的索引,只有"Store.NO,Index.ANALYZED"。我正在尝试使用它来实现短语建议器/预测器。我想搜索单个和多个单词,例如:"where"或"where are",我希望得到类似"你在哪里约翰"之类的东西。

我很惊讶 LUKE 能够以某种方式从创建的索引逐个术语地恢复文档文档(我已经检查了它的来源,但是......我仍然不知道没有TermFreqVector怎么可能)。有没有人知道这怎么可能?我的建议器有两个选项:

1)使用"以某种方式"LUKE的机制从我现在拥有的索引中恢复文档。(那将是最好的)。

2)为短语建议器创建另一个索引。(但是,目前实施的索引大约需要 2-3 天和大约 4-5GB 的时间)。我已经在网上搜索了解决方案,但其中大多数都会导致我无法使用的 SOLR。

我已经尝试了一些解决方案,但是...我卡住了。

如有任何提示,我将不胜感激。

首先,我不建议尝试模仿 Luke 的文档重建。 它用于调试。 它成本高昂、复杂且有损。 如果你真的想知道它是如何工作的,Luke 是开源的,所以获取源代码并查看:/src/org/getopt/luke/DocReconstructor.java

我看到的短语建议的实现是将短语存储为StringField,并使用SpellChecker来查找建议。 这将要求您定义符合"短语"的条件是此上下文,并单独为它们编制索引。 我可能只是为此创建另一个字段,而不是一个完全独立的索引,但这取决于您。

好的。经过几次重试后,采用不同的方法...我做到了,它的工作速度非常快。:)我做了什么。我使用附加选项"TermVector.WITH_POSITIONS"重新索引了所有文档,并且我正在使用前缀查询直接在索引中搜索术语。然后,我将在文档中搜索的术语的所有位置都存储在地图中。然后,我正在迭代文档术语,检查术语位置是否为TermPosition <=(建议短语的数量)。

如果您需要示例,请询问:)

最新更新