2008-11-13 12 views
15

Utilizando Lucene, se pueden recuperar los términos contenidos en un índice, es decir, las palabras derivadas únicas, excluyendo palabras de parada, que contienen los documentos en el índice. Esto es útil para generar sugerencias de autocompletar, entre otras cosas. ¿Es posible algo similar con los índices de texto completo de MS SQL Server?Recuperación de los términos del índice de texto completo de SQL Server

Respuesta

18

Puede usar la nueva vista del sistema en SQL Server 2008 para obtener los términos y el recuento de las ocurrencias, ¿esto es lo que quiere?

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

Debe proporcionar el db_id y el object_id de la tabla de texto completo. Este es el enlace de MSDN para esto.

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

6

Estoy de acuerdo de que esta información (palabras del índice, se derivó palabras, etc.) es muy útil - y si SQL Server es serio compromiso de ofrecer una plataforma advanced, es necesario exponer esta información. Realmente no está disponible en versiones anteriores, por lo que puedo decir. Sin embargo, el juego cambia en SQL Server 2008.

SQL Server 2008 ofrece nuevas vistas de gestión dinámica que ofrecen estos metadatos para texto completo. Preste especial atención a sys.dm_fts_parser y sys.dm_fts_index_keywords.

La vista sys.dm_fts_parser toma una frase, junto con un par de otros parámetros y muestra una tabla que muestra un conjunto de filas, mostrando las versiones derivadas de las palabras individuales después de que el separador de palabras las haya considerado como palabras separadas.

MSDN da el ejemplo de esta consulta en la vista:

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

Para obtener las palabras clave, puede utilizar sys.dm_fts_index_keywords.

Espero que eso te dirija en la dirección correcta. Aclamaciones.

0

sys.dm_fts_index_keywords da devoluciones la lista de términos indexados, con estadísticas adicionales, no la lista de palabras irrelevantes que se restituye gracias a sys.fulltext_stopwords.

1

Con lo siguiente, puede tomar el nombre de la tabla y el nombre de la columna como variables. Funcionará en la base de datos actual que se ejecuta, omitirá los resultados del final del archivo y ordenará los resultados descendiendo por el número de apariciones.

Tenga en cuenta que la indexación de texto completo debe estar habilitado en esa tabla y la columna

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 
Cuestiones relacionadas