I solved this problem with a post from Peter Ledbrook , however some efforts were needed:
Since the last searchable plugin uses Lucene 2.4.1, which does not contain ASCIIFoldingFilter (available since 2.9.0) and ISOLatin1AccentFilter does not support many languages. I created my own filter for emphasis removal :
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 } }
and the appropriate filter provider:
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) } }
Now you only need to register this filter provider in the configuration of the searchable plugin (grails-app / conf / Searchable.groovy):
compassSettings = [ 'compass.engine.analyzer.default.filters': 'stripAccents', 'compass.engine.analyzer.search.filters': 'stripAccents', 'compass.engine.analyzerfilter.stripAccents.type': 'StripAccentsFilterProvider' ]
source share