Grails中不区分重音的搜索

Grails中不区分重音的搜索,grails,diacritics,compass-lucene,grails-searchable,Grails,Diacritics,Compass Lucene,Grails Searchable,如何使用不区分重音的方式进行全文搜索?我在的帮助下解决了这个问题,但需要付出一些努力: 由于最新的可搜索插件使用Lucene 2.4.1,该插件不包含(从2.9.0开始提供)并且不支持多种语言,因此我为其创建了自定义过滤器: 和相应的筛选器提供程序: import org.apache.lucene.analysis.TokenStream import org.compass.core.config.CompassSettings import org.compas

如何使用不区分重音的方式进行全文搜索?

我在的帮助下解决了这个问题,但需要付出一些努力:

由于最新的可搜索插件使用Lucene 2.4.1,该插件不包含(从2.9.0开始提供)并且不支持多种语言,因此我为其创建了自定义过滤器:

和相应的筛选器提供程序:



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

    }

现在,您只需在searchable插件(grails app/conf/searchable.groovy)的配置中注册这个过滤器提供程序:



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

    }

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