我有一个包含二进制文档(如PDF)的大型数据库和没有TermFreqVector的索引,只有“Store.NO,Index.ANALYZED”。我正在尝试使用它实现短语建议/预测器。我想搜索单个和多个单词,例如:“where”或“where are”,我希望得到类似“你在哪里约翰”的内容。
我很惊讶LUKE能够以某种方式从创建的索引中逐项恢复文档文档(我检查了它的来源,但是......我仍然不知道如果没有TermFreqVector它是如何实现的)。有没有人知道它是如何可能的? 我的建议者有两种选择:
1)使用'某种方式'LUKE的机制从我现在拥有的索引中恢复文档。 (那将是最好的)。
2)为短语建议者创建另一个索引。 (但是,目前实施的索引大约需要2-3天,大约需要4-5Gig)。我已经在网上搜索了解决方案,但是大多数都导致了我无法使用的SOLR。
我已经尝试了很少的解决方案但是...我已经坚持了。
如果有任何提示,我将不胜感激。
答案 0 :(得分:0)
首先,我不建议尝试模仿Luke的文档重建。它用于调试。这是昂贵,复杂和有损的。如果你真的想知道它是如何工作的,那么Luke是开源的,所以抓住源代码并看看:/src/org/getopt/luke/DocReconstructor.java
我在短语建议中看到的实现是将短语存储为StringField
,并使用SpellChecker
来查找推荐。这将要求您定义什么限定为“短语”是此上下文,并单独索引它们。我可能只是为此创建另一个字段,而不是一个完全独立的索引,但这取决于你。
答案 1 :(得分:0)
行。经过几次重试后采取了不同的方法......我做到了这一点并且工作得非常快。 :) 我做了什么。我使用附加选项“TermVector.WITH_POSITIONS”重新索引了我的所有文档,并且我正在使用PrefixQuery直接在索引中搜索术语。然后,我将在文档中搜索我正在搜索的术语的所有位置,并将其与地图一起存储。然后,我正在迭代文档术语,检查术语位置是否为TermPosition< =(建议短语的数量)。
如果您需要示例,请询问:)