2013-09-07 10 views
8

Podczas próby uaktualnienia z Solr 4.3.0 do 4.4.0 SOLR wpadłem na ten wyjątek:Solr 4.4: StopFilterFactory i enablePositionIncrements

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

, które doprowadziły mnie do this issue. Muszę być w stanie dopasować zapytania niezależnie od interweniowania stopwords (który pracował z enablePositionIncrements = "true"). Na przykład: "foo of the bar" znajdzie dokumenty pasujące do "foo bar", "foo of bar" i "foo of the bar". Z tą opcją przestarzałą w wersji 4.4.0 nie wiem, jak zachować tę samą funkcjonalność.

package javadoc dodaje:

Jeśli wybrany analizator filtruje słowa STOP „” i „”, a następnie do dokumentu zawierającego ciąg „niebieski jest niebo”, tylko tokeny „niebieski” , "niebo" jest indeksowane, z pozycją ("niebo") = 3 + pozycja ("niebieski"). Teraz zapytanie "niebieskie jest niebem" znajdzie ten dokument, ponieważ ten sam analizator filtruje te same słowa zatrzymania z tego zapytania. Jednak zapytanie "niebieskie niebo" nie znajdzie tego dokumentu, ponieważ przyrost pozycji między "niebieskim" a "niebem" wynosi tylko 1.

Jeśli to zachowanie nie jest zgodne z potrzebami aplikacji, należy skonfigurować analizator zapytań nie uwzględniać przyrostów pozycji podczas generowania zapytań dotyczących fraz.

Ale nie ma żadnej wzmianki o tym, jak właściwie skonfigurować analizator zapytań, aby to zrobić. Czy ktoś wie, jak sobie z tym poradzić, gdy Solr porusza się w kierunku 5.0?

+0

znalazłeś rozwiązanie tego problemu? –

+0

@VishalParekh nope - nie znalazłem jeszcze rozwiązania ... – condit

+0

@condit Mam ten sam problem, myślałem o ponownym wdrożeniu 'StopFilterFactory' i ponownie włącz opcję" enablePositionIncrements "na false – MoustafaAAtta

Odpowiedz

0

Można użyć zbliżeniową wyboru:

"foo bar"~2 
+0

Nie zapewnia to odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. – diosney

+0

Usunięto pytanie retoryczne :) –

0

ja nie wiem, czy to jest zalecane do użytku, ale nadal istnieją pewne klas starszych w Lucene 5, takie jak Lucene43StopFilter.

Niestety wydaje się, że zniknął w Lucene 6 ...

0

znalazłem gdzieś na realizację netto 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; 
    } 
}