だから私は自分のサイトの検索をデータベースに保存したいのですが、単語の順序は私にとって重要ではありませんが、それらを一意にしたいのです。たとえば:
some words
と
words some
私にとっては同じで、最後の検索の時間を更新したいだけです。
それで、SQL(UNIQUEなど)でこれを行う方法はありますか、それともサーバー側言語で解決策を見つける必要がありますか?
そして、前もって感謝します。
これを行うためのより良い方法があるかどうかはわかりませんが、私が考えることができる唯一の方法は、PHP で文字列をスペースで分割し、アルファベット順に並べることです。
$words = explode(" ", $keywords);
sort($words);
$sorted_keywords = implode(" ", $words);
次に、データベースから保存/検索するときは、単語の順序に関係なく、常に同じ文字列を使用します。
$words = preg_split("\b", $words);
sort($words);
implode(" ", $words);
単語をスペースで区切っている場合は、スペースで爆発させることもできますarray_unique
。同様に使用することもできます。これは、検索された単語を並べ替えた文字列になります。
DBMS がすぐにそのような機能を提供するかどうか、私は真剣に疑っています。次のような方法で検索テキストを正規化する必要があります。
normalize("some words") = normalize("words some")
その後、正規化されたバージョンをデータベースに保存し、同じ正規化された形式になる別の検索テキストが検出されるたびに更新できます。