2015-12-18 57 views
2

我試圖從滿足搜索匹配的票據中檢索數據。這裏的相關比特數據是票據具有名稱以及任意數量的評論SQL Server全文搜索:一對多關係

目前,我對匹配的傳票名稱搜索像這樣:

JOIN freetexttable(Tickets,TIC_Name,'Test ') s1 
    ON TIC_PK = s1.[key] 

凡從全文目錄[關鍵]等於TIC_PK。

這對我很好,並且讓我可以訪問s1。 排名,這是重要爲我排序。

現在我的問題是,這種方法不適用於票據搜索,因爲評論目錄中的鍵是評論PK,並沒有給我任何我可以用來鏈接到票證的信息。

我很困惑如何去尋找多個描述,並仍然得到一個有意義的排名。 我很熟悉全文搜索,可能會漏掉一些明顯的東西。

繼承人我在說什麼,我需要當前的嘗試:

WHERE TIC_PK IN(
    SELECT DES_TIC_FK FROM freetexttable(TicketDescriptions, DES_Description,'Test Query') as t 
    join TicketDescriptions a on t.[key] = a.DES_PK 
    GROUP BY DES_TIC_FK 
    ) 

這讓我與搜索匹配的評論票,但我不認爲這是可能由與此法的等級數據FREETEXTTABLE回報進行排序。

+0

您是否試圖在單個搜索中搜索名稱+評論? – Keith

+0

理想情況下,但它是困擾着我的評論,我不認爲同時做這兩件事會導致任何額外的問題。 – SpeedOfRound

回答

1

要在同一時間搜索名稱和評論並獲得最有意義的排名,您應該將所有這些信息放入相同的表 - 新表 - 通過ETL過程從現有表填充。

新表可能是這個樣子:

CREATE TABLE TicketsAndDescriptionsETL (
    TIC_PK int, 
    TIC_Name varchar(100), 
    All_DES_Descriptions varchar(max), 
    PRIMARY KEY (TIC_PK) 
) 
GO 

CREATE FULLTEXT INDEX ON TicketsAndDescriptionsETL (
    TIC_Name LANGUAGE 'English', 
    All_DES_Descriptions LANGUAGE 'English' 
) 

附表此表可通過SQL作業填充或者,觸發對門票和TicketDescriptions表,或者在您的數據層的一些掛鉤。對於具有多個TicketDescriptions記錄的票證,將所有這些註釋的文本合併到All_DES_Descriptions列中。

然後針對這個新表運行全文搜索。

儘管這種方法確實會爲機器添加另一個齒輪,但實際上沒有其他方法可以跨多個表執行全文搜索並生成一個等級。