2013-05-30 16 views
0

我正在嘗試進行全文搜索,但遇到了實現它的問題。我有一個可以有多個「標題」的對象。我有一個存儲過程需要一種語言和國家,並根據本地化返回最佳「標題」的標準化結果。 我想要做的是在「標題」表上執行全文搜索,它將搜索所有行,但只返回標準化的默認標題。將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 
) 

回答

0

我到底到了那裏....我開始在「標題」的全文檢索表,然後加入這一回MainObject表,並從那裏進行的。我必須按我想要選擇的一切進行分組。

SELECT MainObject.ID, MAX(KEY_TBL.RANK) AS IndexRank, MainObject.OtherColumns, Title.Name, Description.Name 
FROM Title AS FT_TBL 
INNER JOIN 
FREETEXTTABLE(Title,Name,'Some Search') AS KEY_TBL 
ON FT_TBL.ID = KEY_TBL.[KEY] 
INNER JOIN 
MainObject ON FT_TBL.MainObjectID = MainObject.ID 
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 
) 
GROUP BY MainObject.ID, KEY_TBL.RANK, MainObject.OtherColumns, Title.Name, Description.Name 
ORDER BY IndexRank desc