使用 Lucene,可以检索索引中包含的术语,即索引中的文档包含的唯一的词干词,不包括停用词。这对于生成自动完成建议非常有用。MS SQL Server 全文索引是否有类似的可能?
4 回答
您可以使用 SQL Server 2008 中的新系统视图来获取术语和出现次数,这是您想要的吗?
sys.dm_fts_index_keywords_by_document
(
DB_ID('database_name'),
OBJECT_ID('table_name')
)
您需要提供全文表格的db_id
和object_id
。这是 MSDN 链接:sys.dm_fts_index_keywords_by_document。
我同意这些信息(索引中的词、词干等)很有用——如果 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。
我希望这能为您指明正确的方向。干杯。
使用以下内容,您可以将表名和列名作为变量。它将在它运行的当前数据库上工作,省略文件结尾结果并按出现次数降序排列结果。
请注意,必须在该表和列上启用全文索引
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
sys.dm_fts_index_keywords
给出返回带有附加统计信息的索引词列表,而不是由于sys.fulltext_stopwords
.