17

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

4

4 回答 4

20

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

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

您需要提供全文表格的db_idobject_id。这是 MSDN 链接:sys.dm_fts_index_keywords_by_document

于 2008-12-03T12:58:39.107 回答
7

我同意这些信息(索引中的词、词干等)很有用——如果 SQL Server 认真考虑提供搜索平台,则需要公开这些信息。据我所知,它在以前的版本中确实不可用。但是,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。

我希望这能为您指明正确的方向。干杯。

于 2009-11-20T22:00:32.307 回答
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
于 2014-09-17T19:23:08.410 回答
0

sys.dm_fts_index_keywords给出返回带有附加统计信息的索引词列表,而不是由于sys.fulltext_stopwords.

于 2013-07-10T15:58:23.273 回答