2017-01-05 37 views
0

春を使用してユーザー検索クエリを検索エンジンのデータベースレコードと照合する方法を見つけることを試みていますが、アクセント付きの母音などの文字。通常の文字と春の特殊文字との一致文字列

例:search query = 'cafe'データベースレコード= 'café'

私はデータベースレコードでクエリに単語のステムを使用しています。

特殊文字「café」を含むクエリと、この特殊文字「cafe」およびviceversaを含まない文字列を照合する最も簡単な方法はどれですか?

UPDATE

私は必要なすべての情報は、既にDBに新しい列を作成するためのアプローチはそれほど魅力的ではないので、キャッシュされています。私はより多くの春に基づいて解決策を探しています。

+0

あなたが使用しているDBはわかりませんが、mysqlは正規表現をサポートしています。 http://dev.mysql.com/doc/refman/5.7/en/regexp.html –

+0

"検索エンジン"とは何ですか? – Andreas

+0

http://stackoverflow.com/questions/8359595/the-most-efficient-way-to-implement-a-phonetic-search ご確認ください –

答えて

5

あなたはフォローのように、java.text.Normalizerを使用することができます。

import java.text.Normalizer; 
import java.text.Normalizer.Form; 

public static String removeAccents(String text) { 
    return text == null ? null : 
     Normalizer.normalize(text, Form.NFD) 
      .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
} 

Normalizerは、2つの文字(文字とアクセント)のセットに、元の文字を分割します。例えば、文字(U + 00E1)はaに分割されます (U + 0061)とacute accent U + 0301

\p{InCombiningDiacriticalMarks}+正規表現は、このようなすべての分音コードが一致し、我々は空の文字列に置き換えます。

など、あなたのqueryは次のようになります。SQL Serverの

SELECT * FROM Table 
WHERE Column Like '%stringwithoutaccents%' COLLATE Latin1_general_CI_AI 

(10グラムから)ORACLE

SELECT * FROM Table 
WHERE NLSSORT(Column, 'NLS_SORT = Latin_AI') 
Like NLSSORT('%stringwithoutaccents%', 'NLS_SORT = Latin_AI') 

CI「はアクセントを区別しないため "ケース小文字を区別しない" とAIの略

"

私はそれがあなたを助けてくれることを願っています。