現在、映画やテレビ番組のデータベース テーブルを全文検索することを主な目的とするストアド プロシージャがあります。部分キーワード検索を行うために、検索クエリをスペースで分割するコードを SQL に追加し、次のようなステートメントを出力しました。
"batman*" ~ "be*"
たとえば、元の文字列「batman be」は、ユーザーが入力しているときにページ上のテキストボックスから生成でき、JavaScript キーアップイベントごとに、そのテキストボックスにあるものをストアド プロシージャに送信して、結果を次のように取得します。入力します(オートコンプリートのように)。この場合、ユーザーは "Batman Begins" または "The Batman: Batgirl Begins" (テレビ番組のエピソード) を探していた可能性があり、結果として両方が表示されるはずです。
以下は私のクエリのサンプルです。上記の例では、@partialKeywordString は"batman*" ~ "be*"
.
SELECT f.title
FROM Films f INNER JOIN
CONTAINSTABLE(Films, Title, @partialKeywordString) f_key ON f.filmid = f_key.[key]
ORDER BY f_key.Rank DESC
クエリの問題は、ランキングが期待どおりに表示されないことです。「バットマン」だけを検索すると、「バットマン」という単語で始まる、または「バットマン」という単語だけを含むすべての映画のタイトルが最初に表示されると思われます。しかし、そうではありません。
「バットマン」だけを検索した場合の結果の例を以下に示します。
「バットマン:アニメシリーズ - エピソード 114」
「バットマンとロビンの冒険 - エピソード 218」
「バットマンとロビン - エピソード 101」
「バットマン - エピソード 101」
「バットマンとロビン - エピソード 204」
リストのずっと下に、私が探していた映画があります。「バットマン ビギンズ」または単に「バットマン」です。
このクエリを微調整する方法についてのアドバイスを探しています。私は間違いなく SQL の専門家ではなく、上記のコードを手動で処理して動作させただけのように感じます。もっと洗練された、または強力な解決策があるような気がしますが、まだ見つけていません。
前もって感謝します