是否可以将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'列,因为这是一个连接列并将包含所有数据。但是,这会影响相关性排名,似乎并不是一个好的解决方案。