我正在嘗試進行全文搜索,但遇到了實現它的問題。我有一個可以有多個「標題」的對象。我有一個存儲過程需要一種語言和國家,並根據本地化返回最佳「標題」的標準化結果。 我想要做的是在「標題」表上執行全文搜索,它將搜索所有行,但只返回標準化的默認標題。將SQL全文搜索添加到現有SELECT語句的問題
要獲得標準化的結果,我有這樣的事情
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
)
說,一個對象有3個冠軍,阿爾法,布拉沃和查理阿爾法是默認的標題。 我希望能夠對Bravo進行全文搜索。 Bravo被鏈接到的對象被找到,但是被上面的語句標準化了。 I.E搜索「Bravo」並將「Alpha」作爲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的列表。然後我可以通過頂部聲明運行這些。有沒有辦法將這兩者結合在一個更優雅的莊園中,從而獲得更好的表現?
更新: 我可以在全文語句中執行WHERE IN,但我不知道如何將RANK返回到主語句,以便可以通過遞減RANK來排序最終輸出。
NORMALIZING STATEMENT
WHERE MainObject.ID IN
(
FULL-TEXT STATEMENT
)