Opencart の基本的な検索が十分でないことはすでに何度も書かれていました.. さて、私はこの問題に遭遇しました:
顧客が私の国 (スロバキア (UTF8)) で製品を検索する場合、おそらく分音記号を使用しません。そこで彼/彼女は「cucoriedka」と書き留めましたが、何も見つかりませんでした。
しかし、データベースに「čučoriedka」という名前の商品があり、彼が探していたものなので、それも表示したいと思います。
この仕事を得る方法を考えていますか?シンプルなほど良い!
私はスロバキア語について無知で、申し訳ありません。しかし、スロバキア語の照合順序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
ただし、列の照合順序を変更するよりも検索が遅くなります。
MySQL の機能を使用することができSOUNDEX()
ます。SOUNDS LIKE
これらの関数は音声学を比較します。
英語以外はsoundexの精度が怪しいです。しかし、次のように使用すると改善される可能性があります
select soundex('ball')=soundex('boll') from dual
SOUNDS LIKE
も使用できます。
と の両方を組み合わせて使用すると、SOUNDEX()
精度SOUNDS LIKE
が向上します。
詳細については、MySQL のドキュメントまたはmysql-sounds-like-and-soundexを参照してください。