2011-09-22 15 views

Odpowiedz

5

Mam rozwiązać ten problem z pomocą Peter Ledbrook's post jednak niektóre wysiłek był potrzebny:

Od najnowszą wtyczkę przeszukiwania używa Lucene 2.4.1, która nie zawiera ASCIIFoldingFilter (dostępna od 2.9.0) i nie ISOLatin1AccentFilter wspierać wiele języków stworzyłem własny filtr dla stripping accents:



    import java.text.Normalizer 
    import org.apache.lucene.analysis.Token 
    import org.apache.lucene.analysis.TokenFilter 
    import org.apache.lucene.analysis.TokenStream 

    class StripAccentsFilter extends TokenFilter { 

     StripAccentsFilter(TokenStream input) { 
      super(input) 
     } 

     public final Token next(Token reusableToken) { 

      assert reusableToken 

      Token nextToken = input.next(reusableToken) 
      if (nextToken) { 
       nextToken.setTermBuffer(Normalizer.normalize(nextToken.termBuffer() as String, Normalizer.Form.NFD) 
         .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")) 
       return nextToken 
      } 
      return null 
     } 
    } 

i odpowiedni filtr dostawca:



    import org.apache.lucene.analysis.TokenStream 
    import org.compass.core.config.CompassSettings 
    import org.compass.core.lucene.engine.analyzer.LuceneAnalyzerTokenFilterProvider 

    class StripAccentsFilterProvider implements LuceneAnalyzerTokenFilterProvider { 

     public void configure(CompassSettings paramCompassSettings) { 
     } 

     public TokenStream createTokenFilter(TokenStream paramTokenStream) { 
      return new StripAccentsFilter(paramTokenStream) 
     } 

    } 

Teraz wszystko, co musisz zrobić, to zarejestrować tego dostawcę filtra w konfiguracji wtyczki przeszukiwania (grails-app/conf/Searchable.groovy):

compassSettings = [ 
    'compass.engine.analyzer.default.filters': 'stripAccents', 
    'compass.engine.analyzer.search.filters': 'stripAccents', 
    'compass.engine.analyzerfilter.stripAccents.type': 'StripAccentsFilterProvider' 
] 
Powiązane problemy