是否可以將CONTAINSTABLE和NOT關鍵字用於SQL Server全文搜索並排除單列包含要排除的值的行?在全文搜索和多列中使用NOT關鍵字
例如,讓我們採取以下索引視圖(簡化的用於說明此問題的目的):
ItemId INT
FirstName VARCHAR(200)
MiddleName VARCHAR(200)
LastName VARCHAR(200)
Address VARCHAR(1000)
ChildrenNames TEXT
SearchData TEXT
SearchData不同於其它文本/ VARCHAR字段生成級聯字段。
這種看法,然後可以使用下面的查詢查找包含姓行進行搜索,但沒有姓氏:該查詢似乎
SELECT *
FROM [v_MyView] V
LEFT OUTER JOIN CONTAINSTABLE
(
[v_MyView],
(
[FirstName],
[MiddleName],
[LastName],
[Address],
[ChildrenName],
[SearchData]
), '"name" AND NOT "lastname"') FTS ON [FTS].[Key] = [V].[ItemId]
WHERE (ISNULL(RANK,0) > 0)
不返回正確的結果,因爲它會僅排除行,如果搜索字段的所有符合條件,而它應該排除ANY符合條件的行。
即。包含名和姓氏在任何(單)列行應該從結果集被排除,而不是隻包含名和姓氏在每列(這將是行不太可能)。
唯一可用的選項似乎是檢查用戶查詢是否包含任何排除值(例如name -lastname),如果是,則限制查詢僅搜索'SearchData'列,因爲這是一個連接列並將包含所有數據。但是,這會影響相關性排名,似乎並不是一個好的解決方案。