0

以下のような MySQL クエリがあります。

$query = "SELECT * FROM dictionary WHERE word LIKE '%".$word."%' ORDER BY word LIMIT 10";

これにより、辞書データベースで単語が検索 (および表示) されます。

検索が返されます。

Drunken for Drunk, etc, etc..Drunken for Drunke, etc, etc.. およびDrunken for Drunken, etc, etc..

しかし、それは返さDrunkenれませんDrunkin。この単語を提案語として表示したいと思います (Google で見られるような)。これどうやってするの?

以下は参照用の完全なコードです。

$db = new pdo("mysql:host=localhost;dbname=dictionary", "root", "password");
$query = "SELECT * FROM dictionary WHERE word LIKE '%".$word."%' ORDER BY word LIMIT 10";
$result = $db->query($query);
$end_result = '';
if ($result) {
    while ( $r = $result->fetch(PDO::FETCH_ASSOC) ) {
        $end_result .= $r['word'].'<br>';
    }
}
echo $end_result;
4

5 に答える 5

3

SOUNDEXを使用してみてください

Soundexキーには、同じように発音された単語が同じsoundexキーを生成するという特性があるため、スペルはわかっているが発音はわかっているデータベースでの検索を簡素化するために使用できます。このsoundex関数は、文字で始まる4文字の長さの文字列を返します。

これが正しい方向にあなたを導くかもしれないSOに関するいくつかの質問です:

お役に立てれば。

于 2012-06-01T12:07:54.820 に答える
1

単純なケースでは Soundex が役立つかもしれませんが、このようなものを適切に実装したい場合は、あいまいな (不正確な) 検索を実行できる Lucene 検索インデックスが必要になります。Apache Solr PHP portを見てください。

于 2012-06-01T12:13:12.593 に答える
0

念のために言っておきますが、2 つの文字列の「距離」または類似度を測定するために使用されるレーベンシュタイン関数についてここで言及されていないことに驚いています。最近ではメタフォン。

数行のコードを使用すると、Google の種類のものから「もしかして」を取得できます。php.net ドキュメントの例 #1を参照してください。

この例は、単語の静的配列に基づいていることに注意してください。これらの単語をデータベースから取得する必要がある場合は、さらに数行実装する必要があります...

于 2015-01-29T14:38:42.997 に答える
0

単なる LIKE ステートメントよりも複雑なものが必要になります。Drunken には Drunk という単語が含まれているため、Drunken for Drunk が表示されます。

より複雑なアルゴリズムは、キーボード レイアウトのタイプミスの可能性を調べます。たとえば、「drumk」を検索すると、文字 M が (QWERTY キーボードで) N の隣にあると解釈され、酔っていることが示唆されます。

結果がない場合は、検索クエリから最後の文字を削除することもできます。たとえば、dranke を検索しても何も見つからない場合は、drank などを検索してみてください。

お役に立てれば。

于 2012-06-01T12:09:55.113 に答える
-1

最も簡単な方法:

SELECT * FROM テーブル名 WHERE soundex(フィールド名) LIKE CONCAT('%', soundex('searching_element'), '%')

于 2013-10-01T13:34:52.290 に答える