2008-11-13 126 views
15

使用Lucene,可以检索索引中包含的术语,即索引中包含文档的唯一词干单词(不包括停用词)。这对于生成其他内容中的自动填充建议非常有用。 MS SQL Server全文索引可能类似吗?检索SQL Server全文索引术语

回答

18

您可以使用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

6

我同意,这信息(在索引的话,朵朵字等)是有用的 - 如果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。

我希望你指出正确的方向。干杯。

0

sys.dm_fts_index_keywords返回索引条目列表,附加统计信息,而不是由于sys.fulltext_stopwords而重新建立的噪音词列表。

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 
启用