检索SQL Server全文索引术语

时间:2008-11-13 14:51:55

标签: sql-server full-text-search

使用Lucene,可以检索索引中包含的术语,即索引中包含的文档中唯一的词干词,不包括停用词。这对于生成自动完成建议等很有用。 MS SQL Server全文索引可能类似吗?

4 个答案:

答案 0 :(得分:19)

您可以使用SQL Server 2008中的新系统视图来获取出现的术语和计数,这是您想要的吗?

sys.dm_fts_index_keywords_by_document
( 
    DB_ID('database_name'),     
    OBJECT_ID('table_name') 
)

您需要提供全文表的db_id和object_id。这是MSDN的链接。

http://msdn.microsoft.com/en-us/library/cc280607.aspx

答案 1 :(得分:7)

我同意这些信息(索引中的单词,词干等)是有用的 - 如果SQL Server认真提供serch平台,则需要公开这些信息。据我所知,它在以前的版本中确实不可用。但是,游戏在SQL Server 2008中发生了变化。

SQL Server 2008提供了新的动态管理视图,可为全文提供此元数据。请特别注意sys.dm_fts_parser和sys.dm_fts_index_keywords。

sys.dm_fts_parser视图接收一个短语以及其他几个参数,并输出一个显示行集的表格,显示断字者将其视为单独的单词后单个单词的词干版本。

MSDN针对视图提供了此查询的示例:

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis" ', 1033, 0, 0)

要获取关键字,您可以使用sys.dm_fts_index_keywords。

我希望指出你正确的方向。欢呼声。

答案 2 :(得分:1)

使用以下内容,您可以将表名和列名作为变量。 它将在运行它的当前数据库上工作,省略文件结尾,并按发生次数降序排列结果。

请注意,必须在该表和列

上启用全文索引
DECLARE @TableName NVARCHAR(200) = 'MyTable'
DECLARE @ColumnName NVARCHAR(200) = 'MyColumn'

SELECT DISTINCT(display_term), occurrence_count FROM sys.dm_fts_index_keywords_by_document
( 
    DB_ID(),     
    OBJECT_ID(@TableName) 
)
WHERE column_id =
(
    SELECT TOP 1 col.column_id FROM sys.objects obj
    INNER JOIN sys.columns col ON col.object_id = obj.object_id
    WHERE obj.name = @TableName
    AND col.name = @ColumnName
)
AND keyword != 0xFF
ORDER BY occurrence_count DESC

答案 3 :(得分:0)

sys.dm_fts_index_keywords返回包含附加统计信息的索引字词列表,而不是由于sys.fulltext_stopwords而重新生成的干扰字列表。