Grails Searchable Pluginアクセントを使用せずに全文検索を行う方法は?
1093 次
1 に答える
5
Peter Ledbrookの投稿の助けを借りてこの問題を解決しましたが、いくつかの努力が必要でした。
最新の検索可能なプラグインはASCIIFoldingFilter(2.9.0以降で使用可能)を含まないLucene 2.4.1を使用し、 ISOLatin1AccentFilterは多くの言語をサポートしていないため、アクセントを取り除くためのカスタムフィルターを作成しました。
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'
]
于 2011-09-23T02:48:49.877 に答える