有没有办法获取我的SQL Server 2008 FullText目录使用的StopWord列表? 并在我的C#代码隐藏中使用它?
我想在我用来搜索术语并突出显示它们的ASP.NET页面中使用它。
搜索页面和突出显示已经正常工作,但我想改进突出显示。我不想突出显示在我的StopWord列表中的单词。
答案 0 :(得分:8)
在sql server management studio中,如果从全文索引中询问属性,则可以看到它使用的停止列表。见here。
然后,您可以使用系统视图sys.fulltext_stoplists和sys.fulltext_stopwords来获取停用词列表。
答案 1 :(得分:6)
SELECT * FROM sys.fulltext_stopwords |
SELECT * FROM sys.fulltext_system_stopwords
您可以通过在where子句
中包含语言代码来过滤返回的停止列表e.g。 SELECT * FROM sys.fulltext_system_stopwords WHERE language_id = 1033
(id 1033对应于syslanguages'English')
或者,可以在“存储”组中的“全文停止列表”类别下针对标准SQL数据库找到这些
答案 2 :(得分:1)
在更高版本的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一样...