【发布时间】:2011-06-25 18:31:02
【问题描述】:
有没有办法获取我的 SQL Server 2008 全文目录正在使用的 StopWord 列表? 并在我的 C# 代码隐藏中使用它?
我想在 ASP.NET 页面中使用它来搜索术语并突出显示它们。
搜索页面和突出显示已经正常工作,但我想改进突出显示。我不想突出显示我的 StopWord 列表中的单词。
【问题讨论】:
标签: c# .net sql-server full-text-search stop-words
有没有办法获取我的 SQL Server 2008 全文目录正在使用的 StopWord 列表? 并在我的 C# 代码隐藏中使用它?
我想在 ASP.NET 页面中使用它来搜索术语并突出显示它们。
搜索页面和突出显示已经正常工作,但我想改进突出显示。我不想突出显示我的 StopWord 列表中的单词。
【问题讨论】:
标签: c# .net sql-server full-text-search stop-words
在 sql server management studio 中,如果您从全文索引中询问属性,您可以看到它使用哪个停止列表。见here。
然后您可以使用系统视图sys.fulltext_stoplists 和sys.fulltext_stopwords 来获取停用词列表。
【讨论】:
sys.fulltext_system_stopwords 中也有默认值。见mssqltipsandtricks.blogspot.com/2012/07/…
SELECT * FROM sys.fulltext_stopwords |
SELECT * FROM sys.fulltext_system_stopwords
您可以通过在 where 子句中包含语言代码来过滤您返回的停止列表
例如SELECT * FROM sys.fulltext_system_stopwords WHERE language_id=1033
(id 1033 对应 syslanguages 'English')
或者,这些可以在标准 SQL 数据库的“存储”组内的“全文停止列表”类别下找到
【讨论】:
在更高版本的 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 中工作...
【讨论】: