2013-09-07 2 views
8

При попытке обновить Solr 4.3.0 до 4.4.0 Solr Я столкнулся с этим исключением:Solr 4.4: StopFilterFactory и enablePositionIncrements

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

, которые привели меня к this issue. Мне нужно иметь возможность сопоставлять запросы независимо от промежуточных стоп-слов (которые использовались для работы с enablePositionIncrements = "true"). Например: «foo of the bar» найдет документы, соответствующие «foo bar», «foo of bar» и «foo of the bar». С этой опцией, устаревшей в 4.4.0, я не понимаю, как поддерживать ту же функциональность.

package javadoc добавляет:

Если выбран анализатор фильтры стоп-слова «есть» и «», то для документа, содержащего строку «синего небо», только жетоны «синий» , «небо» индексируется, положение («небо») = 3 + позиция («синий»). Теперь фразовый запрос «синий - небо» найдет этот документ, потому что тот же анализатор фильтрует одни и те же слова остановки из этого запроса. Но фразовый запрос «голубое небо» не нашел бы этого документа, потому что инкремент позиции между «синим» и «небом» равен только 1.

Если это поведение не соответствует потребностям приложения, необходимо настроить парсер запросов чтобы не учитывать приращения позиции при генерации фразовых запросов.

Но нет никакого упоминания о том, как на самом деле настроить парсер запросов для этого. Кто-нибудь знает, как справиться с этой проблемой, поскольку Solr движется к 5.0?

+0

вы нашли решение этой проблемы? –

+0

@VishalParekh nope - пока не найдено решение ... – condit

+0

@condit У меня такая же проблема, я думал о повторной реализации «StopFilterFactory» и снова включил опцию «enablePositionIncrements» в false – MoustafaAAtta

ответ

0

Вы можете использовать бесконтактный поиск:

"foo bar"~2 
+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. – diosney

+0

снял риторический вопрос :) –

0

Я не знаю, если это рекомендуется для использования, но все еще есть некоторые устаревшие классы в Lucene 5, такие как Lucene43StopFilter.

К сожалению, они, кажется, исчезли в Lucene 6 ...

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; 
    } 
} 
Смежные вопросы