2011-09-22 13 views

Respuesta

5

que han resuelto este problema con la ayuda de Peter Ledbrook's post, sin embargo se necesita un poco de esfuerzo:

Desde último plugin de búsqueda utiliza Lucene 2.4.1 que no contiene ASCIIFoldingFilter (disponible desde 2.9.0) y ISOLatin1AccentFilter no lo hace apoyar muchos idiomas que he creado filtro personalizado para 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 
     } 
    } 

y correspondiente proveedor de filtro:



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

    } 

Ahora todo lo que necesita hacer es registrar ese proveedor de filtro en la configuración del plug-in de búsqueda (griales-app/conf/Searchable.groovy):

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