の正規化されたバージョンを保存して、検索String
できるようにしたいと考えています。like 'xxxx%'
そして、効率的でユーザーの検索に使いやすい良いものを探しています。
私の最初のアイデアは、小文字に変換し、文字以外の文字、アクセント、および冗長な空白を削除することですが、すでに研究および実装され、準備が整っている良いものがあるかどうかはわかりません.
PD: 文字列には場所の名前が含まれます。
の正規化されたバージョンを保存して、検索String
できるようにしたいと考えています。like 'xxxx%'
そして、効率的でユーザーの検索に使いやすい良いものを探しています。
私の最初のアイデアは、小文字に変換し、文字以外の文字、アクセント、および冗長な空白を削除することですが、すでに研究および実装され、準備が整っている良いものがあるかどうかはわかりません.
PD: 文字列には場所の名前が含まれます。
最後に、カスタム ソリューションで終了しました。より効率的かもしれませんが、私にとってはうまく機能しています:
public static normalize(String string) {
string = string.toLowerCase();
//Remove/change all special characters --> àaç is converted to aac
String temp = Normalizer.normalize(string, Normalizer.Form.NFD);
string = pattern.matcher(temp).replaceAll("");
//Remove extra spaces
string = StringUtils.normalizeSpace(string);
}
Commons LangStringUtils.normalizeSpace
からのものです。依存関係を導入したくない場合は、関数から簡単にコードを取得できます。
private static final Pattern WHITESPACE_PATTERN = Pattern.compile("(?: \\s|[\\s&&[^ ]])\\s*");
public static String normalizeSpace(final String str) {
if (str == null) {
return null;
}
return WHITESPACE_PATTERN.matcher(trim(str)).replaceAll(SPACE);
}
検索 API を使用できますか? これはデフォルトでテキストの正規化を提供し、エンドユーザー クエリで使用するように設計されています (つまり、インデックス/名前空間を正しく使用すれば、検証を必要とせずにユーザー クエリを Search API に渡すことができます)。