0

の正規化されたバージョンを保存して、検索Stringできるようにしたいと考えています。like 'xxxx%'

そして、効率的でユーザーの検索に使いやすい良いものを探しています。

私の最初のアイデアは、小文字に変換し、文字以外の文字、アクセント、および冗長な空白を削除することですが、すでに研究および実装され、準備が整っている良いものがあるかどうかはわかりません.

PD: 文字列には場所の名前が含まれます。

4

2 に答える 2

1

最後に、カスタム ソリューションで終了しました。より効率的かもしれませんが、私にとってはうまく機能しています:

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);
}
于 2013-01-31T22:46:49.590 に答える
0

検索 API を使用できますか? これはデフォルトでテキストの正規化を提供し、エンドユーザー クエリで使用するように設計されています (つまり、インデックス/名前空間を正しく使用すれば、検証を必要とせずにユーザー クエリを Search API に渡すことができます)。

于 2013-01-30T00:27:44.320 に答える