2

検索アプリケーションを実装しています

次のSQLクエリによる正確な単語検索を実装しました

SELECT *
FROM jreviews_content
WHERE jr_produits REGEXP '[[:<:]]ryan[[:>:]]'

これはうまく機能するようになりましたが、一部のフィールド、つまり jr_title フィールドに別の要件があります。たとえば、ユーザーがレストランまたはレストランまたはレストランと入力した場合、ユーザーが 1 つの欠落した文字または 1 つの文字の間違い、または 1 つの余分な文字を入力すると、結果が得られるはずですが、一文字以内。

4

4 に答える 4

2

「レーベンシュタイン距離」を探します

実装はこちら

http://www.artfulsoftware.com/infotree/queries.php#552

またはコンパイルされた関数として

http://samjlevy.com/2011/03/mysql-levenshtein-and-damerau-levenshtein-udfs/

于 2013-10-15T12:03:31.150 に答える
1

これにより、検索文字列の前と後に 1 文字の英数字が許可されます。

SELECT *
FROM jreviews_content
WHERE jr_produits REGEXP '[[:<:]][[:alnum:]]{0,1}ryan[[:alnum:]]{0,1}[[:>:]]'

検索文字列の前または後に1文字の英数字を許可する場合は、代わりにこれを使用できます。

SELECT *
FROM jreviews_content
WHERE
  jr_produits REGEXP '[[:<:]][[:alnum:]]{0,1}ryan[[:>:]]'
  OR jr_produits REGEXP '[[:<:]]ryan[[:alnum:]]{0,1}[[:>:]]'
于 2013-10-16T12:19:20.220 に答える
1

http://en.wikipedia.org/wiki/Edit_distanceを確認してください

これは、どの検索エンジンにとっても基本です。

于 2013-10-15T11:48:50.847 に答える