有没有办法获取我的 SQL Server 2008 全文目录正在使用的 StopWord 列表?并在我的 C# 代码隐藏中使用它?
我想在 ASP.NET 页面中使用它来搜索术语并突出显示它们。
搜索页面和突出显示已经正常工作,但我想改进突出显示。我不想突出显示我的 StopWord 列表中的单词。
有没有办法获取我的 SQL Server 2008 全文目录正在使用的 StopWord 列表?并在我的 C# 代码隐藏中使用它?
我想在 ASP.NET 页面中使用它来搜索术语并突出显示它们。
搜索页面和突出显示已经正常工作,但我想改进突出显示。我不想突出显示我的 StopWord 列表中的单词。
选择 * FROM sys.fulltext_stopwords |
选择 * FROM sys.fulltext_system_stopwords
您可以通过在 where 子句中包含语言代码来过滤返回的停止列表
例如 SELECT * FROM sys.fulltext_system_stopwords WHERE language_id=1033
(id 1033 对应于 syslanguages 'English')
或者,这些可以在标准 SQL 数据库的“存储”组中的“全文停止列表”类别下找到
在 sql server management studio 中,如果您从全文索引中询问属性,您可以看到它使用哪个停止列表。见这里。
然后,您可以使用系统视图sys.fulltext_stoplists和sys.fulltext_stopwords来获取停用词列表。
在更高版本的 SQL 中,使用中的活动停止列表似乎已从 GUI 中删除 - 因此 Sem 的正确答案现在已过时。在 SQL Server Management Studio 中,我找不到用于特定全文目录的停止列表。
经过大量挖掘,以下查询将轻松提供每个全文目录使用的停止列表:
select so.name as tableName, sfc.name as fullTextCatalogName, sfi.is_enabled, sfi.stoplist_id, sfs.name as stoplistName
from sys.fulltext_indexes as sfi
left join sys.objects as so on so.object_id = sfi.object_id
left join sys.fulltext_catalogs as sfc on sfc.fulltext_catalog_id = sfi.fulltext_catalog_id
left join sys.fulltext_stoplists as sfs on sfi.stoplist_id = sfs.stoplist_id
因此,如果 stoplist_id 为 0 - 这表示此目录正在使用“默认”系统停止列表。如果 stoplist_id 为 NULL,这表示没有使用停止列表(即 ALTER FULLTEXT INDEX ON {{TABLENAME}} SET STOPLIST = OFF)。
如另一个答案所示 - 如果您想另外列出给定语言的默认系统停止词列表中的哪些停止词(假设这里是英语),您可以:
SELECT * FROM sys.fulltext_system_stopwords WHERE language_id=1033
...查看带有用户定义的停止列表 ID 的列表:
SELECT * from sys.fulltext_stoplists
...如果您想查看用户定义的停用词列表中的停用词:
SELECT * from sys.fulltext_stopwords where language_id = 1033 and stoplist_id = {{a_valid_stoplist_id}}
我希望这会有所帮助,因为我必须在我的应用程序中修复其中的一些问题 - 并且开始真正挠头试图找到索引的活动停止列表的位置 - 因为我习惯于右键单击 -> 工作中的属性旧版本的 MSSQL...