10

Opencart の基本的な検索が十分でないことはすでに何度も書かれていました.. さて、私はこの問題に遭遇しました:

顧客が私の国 (スロバキア (UTF8)) で製品を検索する場合、おそらく分音記号を使用しません。そこで彼/彼女は「cucoriedka」と書き留めましたが、何も見つかりませんでした。

しかし、データベースに「čučoriedka」という名前の商品があり、彼が探していたものなので、それも表示したいと思います。

この仕事を得る方法を考えていますか?シンプルなほど良い!

4

2 に答える 2

5

私はスロバキア語について無知で、申し訳ありません。しかし、スロバキア語の照合順序utf8_slovak_ciでは、スロバキア語の文字čは とは異なるものとして扱われcます。( Čで始まる姓はすべて、電話帳でCで始まる姓の後に来るのですか? おそらくそうです。MySQL の作成者は、確かにそうであると考えています。)

照合は同じように扱いutf8_general_ciます。これは、これらすべてを示すSQLフィドルです。http://sqlfiddle.com/#!9/46c0e/1/0čc

製品名を含む列の照合を に変更するutf8_general_ciと、より検索しやすい表が得られます。テーブルが呼び出されproduct、その名前を持つ列が呼び出されたとしますproduct_name。次に、この SQL データ定義ステートメントは、必要に応じて列を変換します。varchar(nnn)この例で行ったように使用するのではなく、列の実際のデータ型を調べる必要があります。

 alter table product modify product_name varchar(nnn) collate utf8_general_ci

テーブルを変更できない場合は、WHERE 句を変更して、照合を明示的に指定して、このように機能させることができます。

WHERE 'userInput' COLLATE utf8_general_ci = product_name

ただし、列の照合順序を変更するよりも検索が遅くなります。

于 2015-08-23T23:01:56.433 に答える
0

MySQL の機能を使用することができSOUNDEX()ます。SOUNDS LIKE

これらの関数は音声学を比較します。

英語以外はsoundexの精度が怪しいです。しかし、次のように使用すると改善される可能性があります

select soundex('ball')=soundex('boll') from dual

SOUNDS LIKEも使用できます。

と の両方を組み合わせて使用​​すると、SOUNDEX()精度SOUNDS LIKEが向上します。

詳細については、MySQL のドキュメントまたはmysql-sounds-like-and-soundexを参照してください。

于 2015-08-23T22:06:02.357 に答える