【问题标题】:How to get a list of StopWords used in my FullText Catalog?如何获取我的全文目录中使用的停用词列表?
【发布时间】:2011-06-25 18:31:02
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    然后您可以使用系统视图sys.fulltext_stoplistssys.fulltext_stopwords 来获取停用词列表。

    【讨论】:

    • 谢谢,现在我可以创建另一个返回 StopWords 的过程,然后在我的 C# 代码中使用它。
    • 对我来说停用词隐藏在 sys.fulltext_system_stopwords 中。
    • sys.fulltext_system_stopwords 中也有默认值。见mssqltipsandtricks.blogspot.com/2012/07/…
    【解决方案2】:

    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 数据库的“存储”组内的“全文停止列表”类别下找到

    【讨论】:

      【解决方案3】:

      在更高版本的 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 中工作...

      【讨论】:

        猜你喜欢
        • 2019-09-11
        • 1970-01-01
        • 2010-10-04
        • 2020-05-04
        • 2014-09-15
        相关资源
        最近更新 更多