如何获取我的FullText目录中使用的StopWords列表?

时间:2011-02-11 19:06:22

标签: c# .net sql-server full-text-search stop-words

有没有办法获取我的SQL Server 2008 FullText目录使用的StopWord列表? 并在我的C#代码隐藏中使用它?

我想在我用来搜索术语并突出显示它们的ASP.NET页面中使用它。

搜索页面和突出显示已经正常工作,但我想改进突出显示。我不想突出显示在我的StopWord列表中的单词。

3 个答案:

答案 0 :(得分:8)

在sql server management studio中,如果从全文索引中询问属性,则可以看到它使用的停止列表。见here

然后,您可以使用系统视图sys.fulltext_stoplistssys.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一样...