gpt4 book ai didi

grails - Grails 中的重音不敏感搜索

转载 作者:行者123 更新时间:2023-12-04 15:14:57 25 4
gpt4 key购买 nike

如何使用 Grails Searchable Plugin 进行全文搜索口音不敏感?

最佳答案

我在 Peter Ledbrook's post 的帮助下解决了这个问题,但是需要一些努力:

由于最新的可搜索插件使用不包含 ASCIIFoldingFilter 的 Lucene 2.4.1 (自 2.9.0 起可用)和 ISOLatin1AccentFilter不支持多种语言 我为 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
}
}


和相应的过滤器提供程序:


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

}


现在您需要做的就是在可搜索插件(grails-app/conf/Searchable.groovy)的配置中注册这个过滤器提供者:
compassSettings = [
'compass.engine.analyzer.default.filters': 'stripAccents',
'compass.engine.analyzer.search.filters': 'stripAccents',
'compass.engine.analyzerfilter.stripAccents.type': 'StripAccentsFilterProvider'
]

关于grails - Grails 中的重音不敏感搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7516111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com