全文検索をしようとしていますが、実装に問題があります。複数の「タイトル」を持つことができるオブジェクトがあります。言語と国を受け取り、ローカリゼーションに基づいて最適な「タイトル」で正規化された結果を返すストアド プロシージャがあります。私ができるようにしたいのは、「タイトル」テーブルで全文検索を実行することです。これは、すべての行を検索しますが、正規化されたデフォルトのタイトルのみを返します。
正規化された結果を得るには、次のようなものがあります
NORMALIZING STATEMENT
SELECT MainObject.*, Title.Name, Description.Name
FROM MainObject
OUTER APPLY
(
SELECT TOP 1 Title.Name
FROM Title
WHERE Title.MainObject_ID = MainObject.ID AND Title.Language = @language
ORDER BY Title.[Default] DESC
)
OUTER APPLY
(
SELECT TOP 1 Description.Name
FROM Description
WHERE Description.MainObject_ID = MainObject.ID AND Description.Language = @language
ORDER BY Description.[Default] DESC
)
オブジェクトに Alpha、Bravo、Charlie の 3 つのタイトルがあり、Alpha がデフォルトのタイトルであるとします。ブラボーの全文検索ができるようになりたいです。Bravo がリンクされているオブジェクトが見つかりましたが、上記のステートメントで正規化されています。"Bravo" と "Alpha" の IE 検索は、Title.Name として返されます。
これを行う唯一の方法は、最初に次のような検索を実行することです
FULL-TEXT STATEMENT
SELECT Title.MainObject_ID, MAX(KEY_TBL.RANK)
FROM Title
INNER JOIN
FREETEXTTABLE(Title,Name,'Some Search') AS KEY_TBL
ON Title.ID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK >= 50
GROUP BY Title.MainObjectID, KEY_TBL.RANK
ORDER BY KEY_TBL.RANK DESC
これは MainObjects のリストを返します。次に、これらを top ステートメントで実行できます。この 2 つをよりエレガントな方法で組み合わせてパフォーマンスを向上させる方法はありますか?
更新: 全文ステートメントで WHERE IN を実行できますが、RANK をメイン ステートメントに戻す方法がわからないため、RANK の降順で最終出力を並べ替えることができます。
NORMALIZING STATEMENT
WHERE MainObject.ID IN
(
FULL-TEXT STATEMENT
)