関連性によってデータベースを調べる「スマート」検索エンジンを作成しています。私のシステムは、テキストを含むデータベースフィールド「tag_clean」に対応する文の単語数を計算し、適切な結果を取得しようとします(調査ごとに1つ)。
たとえば、tag_cleanフィールドに「searchyoupla boom」を取得し、「search youpla bim」のような別のエントリを取得すると、「searchbim」に2番目のエントリが表示されます。
私のシステムは単語ごとに1ポイントを設定し、結果として最も関連性の高いものを取得します。すべてが機能しますが、私の大きな問題は、単語の順序を完全に無視することです!
「googleimagetest」と「googletest」があり、私のシステムで「google test image」を検索した場合、最も関連性の高いものが最初のものになりますが、それは正しい2番目のものです。
語順の重要性を理解したシステムが欲しいのですが、SQLでどうやってやるのかわかりません。
私のSQLリクエストのサンプル(重要な部分は最後にCASE WHENです):
SELECT *
FROM keywords
WHERE tag_clean LIKE 'google%'
AND (static = 0)
AND
(
tag_clean LIKE '%google%'
OR tag_clean LIKE '%test%'
OR tag_clean LIKE '%image%'
)
OR
(
tag_clean = 'google test image'
AND static = 1
)
ORDER BY
((CASE WHEN tag_clean LIKE '%google%' THEN 1 ELSE 0 END)
+ (CASE WHEN tag_clean LIKE '%test%' THEN 1 ELSE 0 END)
+ (CASE WHEN tag_clean LIKE '%image%' THEN 1 ELSE 0 END))
DESC LIMIT 0, 1;
ありがとうございます:)