0

我有一个带有二进制文档(如 PDF)的大型数据库和一个没有 TermFreqVector 的索引,只是“Store.NO,Index.ANALYZED”。我正在尝试使用它来实现短语建议器/预测器。我想搜索单个和多个单词,例如:“where”或“where are”,我希望得到“where are you john”之类的内容。

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

1)使用“不知何故”卢克的机制从我现在拥有的索引中恢复文档。(那将是最好的)。

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

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

我将不胜感激任何提示。

4

2 回答 2

0

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

我见过的短语建议的实现是将短语存储为StringField, 并用于SpellChecker查找建议。这将要求您定义符合“短语”的条件是这个上下文,并分别索引它们。我可能会为此创建另一个字段,而不是完全独立的索引,但这取决于你。

于 2013-09-19T16:04:17.390 回答
0

好的。在采取不同的方法重试几次之后......我做到了,它的工作速度非常快。:) 我做了什么。我已经使用附加选项“TermVector.WITH_POSITIONS”重新索引了我的所有文档,并且我正在使用 PrefixQuery 直接在索引中搜索术语。然后,我将在文档中搜索我正在搜索的术语的所有位置,并将其与地图一起存储。然后我遍历文档术语,检查术语位置是否为 TermPosition <=(建议短语的数量)。

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

于 2013-09-25T09:11:05.910 回答