1

特殊文字を含む言語の全文検索をサポートするには、コンテンツ管理システムをハックする必要があります。これらは、htmlエンティティとしてデータベースに保存されます。箱から出して、CMSはそれをサポートしていません。バグはずっと前に報告されましたが、どうやら優先順位はありません。私はこのCMSに固執しており、顧客は私のソリューションを待っているので、それをハックする必要があります。くそ...

わかりました...CMSは、特殊文字をhtmlエンティティに変換することによってコンテンツを保存します(これは実際にはバンドルされたエディタによって行われます)。したがって、ドイツ語の「möchten」はDBで「möchten」になります。CMSは次のようなクエリ文字列を作成します

SELECT * FROM `SiteTree` WHERE MATCH( Content ) AGAINST (<SEARCH_STRING> IN BOOLEAN MODE);

テーブルのタイプはMyISAMで、フィールドにはFULLTEXTインデックスがあります。

検索文字列として「m&ouml; chten」を使用すると、MySQLはすべてのページに一致します。これは、&が検索文字列に存在する場合にクレイジーなことを行う演算子であるためです。検索は機能しません。

次のアイデアは、プレースホルダーとして特殊文字を*に置き換えることです。ただし、「m」で始まり、「chten」で終わる次の単語があるとすぐに、これはいくつかの単語にも一致します。理由はわかりませんが、アンパサンドのみをアスタリスクに置き換える(つまり、「m * ouml; chten」を検索する)と、同様の結果が得られます。

同じ問題がここで説明されました。

さて、皆さん、私はあなたの助けが必要です!何か案は?

編集:コンテンツをUTF-8に変換するオプションはありません。

ありがとう!
craesh

4

2 に答える 2

1

なぜhtmlエンティティを使用しているのですか?utf8に切り替えるだけです。

それ以外の場合は、('"search"')のように検索文字列をもう一度引用してみてください。 残念ながら動作しません-http://bugs.mysql.com/bug.php?id= 26265長い間ぶら下がっているバグがあります。私は唯一のアプローチは次のとおりだと思います:

最後のアプローチは、検索目的ですべてのアクセントを置き換えて追加の列を格納することです。

于 2009-09-21T10:01:31.317 に答える
0

全文検索エンジンを使用できます。Apache Luceneは強力ですが、学ぶのは少し難しいです。Apache Solrは習得がはるかに簡単で、非常に便利です。Sphinxは、MySQLと簡単に統合できることで知られています。それらはすべて国際化をうまく処理していると思います。

于 2009-09-21T10:04:09.610 に答える