8

在尝试从 Solr 4.3.0 升级到 Solr 4.4.0 时,我遇到了这个异常:

 java.lang.IllegalArgumentException: enablePositionIncrements=false is not supported anymore as of Lucene 4.4 as it can create broken token streams

这导致我这个问题。我需要能够匹配查询,而不管插入的停用词(曾经与 enablePositionIncrements="true" 一起使用)。例如:“foo of the bar”会找到匹配“foo bar”、“foo of bar”和“foo of the bar”的文档。在 4.4.0 中弃用此选项后,我不清楚如何维护相同的功能。

javadoc添加:

如果选择的分析器过滤了停用词“is”和“the”,那么对于包含字符串“blue is the sky”的文档,只有标记“blue”,“sky”被索引,位置(“sky”) = 3 + 位置(“蓝色”)。现在,短语查询“blue is the sky”会找到该文档,因为相同的分析器会从该查询中过滤相同的停用词。但是短语查询“blue sky”不会找到该文档,因为“blue”和“sky”之间的位置增量仅为 1。

如果此行为不符合应用程序的需要,则需要将查询解析器配置为在生成短语查询时不考虑位置增量。

但是没有提到如何实际配置查询解析器来执行此操作。随着 Solr 迈向 5.0,有谁知道如何处理这个问题?

4

3 回答 3

0

您可以使用邻近搜索:

"foo bar"~2
于 2013-09-07T13:59:22.593 回答
0

我在 RemoveTokenGapsFilterFactory 的网络实现的某个地方找到了

public final class RemoveTokenGapsFilter extends TokenFilter {

    private final PositionIncrementAttribute posIncrAttribute = addAttribute(PositionIncrementAttribute.class);

    public RemoveTokenGapsFilter(TokenStream input) {
        super(input);
    }

    @Override
    public boolean incrementToken() throws IOException {

        if (input.incrementToken()) {
            posIncrAttribute.setPositionIncrement(1);
            return true;
        }

        return false;
    }
}
于 2018-03-09T16:16:01.833 回答
0

我不知道这是否被推荐使用,但是 Lucene 5 中仍然有一些遗留类,例如Lucene43StopFilter

不幸的是,它们似乎在 Lucene 6 中消失了……

于 2016-05-18T00:42:08.630 回答