检索SQL Server全文索引术语

17
使用Lucene,可以检索索引中包含的术语,即索引中文档包含的唯一的词干化单词,不包括停用词。这对于生成自动完成建议等非常有用。使用MS SQL Server全文本索引是否可以实现类似的功能?
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


8
我认为这些信息(索引中的单词,词干单词等)非常有用 - 如果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。

希望这能指引您朝着正确的方向前进。干杯。


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

0

sys.dm_fts_index_keywords 返回索引术语列表,附带统计信息,而不是噪声词列表,后者通过sys.fulltext_stopwords返回。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接