2013-11-27 25 views
0

我使用的是lucene 4.4。当我尝试使用木瓦,WordDelimiter和停用词过滤工厂添加文档时,出现下列异常:Lucene的startOffSet应该大于endOffSet的错误

java.lang.IllegalArgumentException:startOffset必须是非负数,并且endOffset必须> = startOffset,startOffset = 36945 ,endOffset = 36943 在org.apache.lucene.analysis.tokenattributes.OffsetAttributeImpl.setOffset(OffsetAttributeImpl.java:45) 在org.apache.lucene.analysis.shingle.ShingleFilter.incrementToken(ShingleFilter.java:323)

这个例外不适用于所有doucments。这些是针对特定文件的。任何人都有想法吗?

回答

2

您的同义词过滤器可能会创建0的位置增量,并且ShingleFilter不处理0位置增量。 (请参阅Lucene 3475

我相信你应该能够通过将SynonymMap规则设置为KeepOrig设置为false来解决这个问题。基本上,您要确保SynonymFilter不会创建多个词作为相同的位置。如果您在索引时间和查询时间应用相同的SynonymFilter,则通常不需要保留原件。

+0

我也使用WordDelimiterFilterFactory。这会导致问题吗? – ak87

+0

该问题已得到解决。我刚刚改变了过滤器工厂的顺序。无论如何感谢您的帮助。从你的答案中学到了一些东西。所以upvote。 – ak87

+0

除非我的理解不正确,只是交换两者的顺序(尽管它可能不会导致任何错误),与完全移除SynonymFilter的效果不同,因为Synonymfilter的目的是在合并之前查看令牌成带状疱疹? – femtoRgon