2011-09-22 2 views

Répondre

5

J'ai résolu ce problème avec l'aide de Peter Ledbrook's post, mais un peu d'effort était nécessaire:

Depuis le dernier plug-in utilise interrogeable Lucene 2.4.1 qui ne contient pas ASCIIFoldingFilter (disponible depuis 2.9.0) et ne pas ISOLatin1AccentFilter prendre en charge plusieurs langues que j'ai créé un filtre personnalisé pour 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 
     } 
    } 

et fournisseur de filtre correspondant:



    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) 
     } 

    } 

Maintenant, tout ce que vous devez faire est d'enregistrer ce fournisseur de filtre dans la configuration du plug-in interrogeable (Grails-app/conf/Searchable.groovy):

compassSettings = [ 
    'compass.engine.analyzer.default.filters': 'stripAccents', 
    'compass.engine.analyzer.search.filters': 'stripAccents', 
    'compass.engine.analyzerfilter.stripAccents.type': 'StripAccentsFilterProvider' 
] 
Questions connexes