HTMLエンティティのMySQLフルテキスト検索
-
12-09-2019 - |
質問
特殊文字を含む言語のフルテキスト検索をサポートするには、コンテンツ管理システムをハッキングする必要があります。これらは、HTMLエンティティとしてデータベースに保存されます。箱から出して、CMSはそれをサポートしていません。バグはずっと前に報告されていましたが、明らかに優先されません。私はこのCMSに固執しています、顧客は私のソリューションを待っているので、私はそれをハッキングしなければなりません。くそ...
OK ... CMSは、特殊文字をHTMLエンティティに変換することでコンテンツを保存します(これは実際にバンドルされたエディターによって行われます)。したがって、ドイツ語の「Möchten」という言葉は、DBで「Möchten」を取得します。 CMSは、次のようなクエリ文字列を作成します
SELECT * FROM `SiteTree` WHERE MATCH( Content ) AGAINST (<SEARCH_STRING> IN BOOLEAN MODE);
テーブルはタイプmyisamで、フィールドにはフルテキストインデックスがあります。
「möchten」を検索文字列として使用する場合、mySQLはすべてのページと一致します。検索は機能しません。
次のアイデアは、特別なキャラクターをプレースホルダーとして *に置き換えることです。しかし、これはいくつかの単語と一致します。「M」から始まるものと「Chten」で終わる別の次の言葉ができるようになります。理由はわかりませんが、アンパサンドのみをアスタリスクに置き換えると(「m*ouml; chten」を検索することも)同様の結果につながります。
同じ問題について説明しました ここ.
わかりました、皆さん、私はあなたの助けが必要です!何か案は?
編集: コンテンツをUTF-8に変換することはオプションではありません。
ありがとう!
クレシュ
解決
なぜHTMLエンティティを使用しているのですか? UTF8に切り替えるだけです。
それ以外の場合は、検索文字列をもう一度引用してみてください( '"search"')。残念ながらうまくいきません - http://bugs.mysql.com/bug.php?id=26265 長いぶら下がっているバグがあります。唯一のアプローチは次のとおりです。
最後のアプローチは、すべてのアクセントが交換された状態で、検索目的のためだけに追加の列を保存することです。
他のヒント
フルテキスト検索エンジンを使用できます。 Apache Lucene 強力ですが、学ぶのは少し難しいです。 Apache solr 学習がはるかに簡単で、非常に便利です。 スフィンクス MySQLとの簡単な統合で知られています。私は彼ら全員が国際化をうまく処理すると信じています。