0

全文検索をしようとしていますが、実装に問題があります。複数の「タイトル」を持つことができるオブジェクトがあります。言語と国を受け取り、ローカリゼーションに基づいて最適な「タイトル」で正規化された結果を返すストアド プロシージャがあります。私ができるようにしたいのは、「タイトル」テーブルで全文検索を実行することです。これは、すべての行を検索しますが、正規化されたデフォルトのタイトルのみを返します。

正規化された結果を得るには、次のようなものがあります

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
)
4

1 に答える 1