indexes - Recuperando los términos del índice de texto completo de SQL Server
full text search sql server 2017 (4)
Estoy de acuerdo en que esta información (palabras en el índice, palabras derivadas, etc.) es útil, y si SQL Server realmente quiere ofrecer una plataforma de servicio, esta información debe estar expuesta. 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 administració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, que muestra 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 usar sys.dm_fts_index_keywords.
Espero que eso te señale en la dirección correcta. Aclamaciones.
Usando Lucene, uno puede recuperar los términos contenidos dentro de un índice, es decir, las palabras derivadas únicas, excluyendo palabras de finalización, 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?
sys.dm_fts_index_keywords
devuelve la lista de términos indexados, con estadísticas adicionales, no la lista de palabras irrelevantes que se restituye gracias a sys.fulltext_stopwords
.
Puede usar la nueva vista de sistema en SQL Server 2008 para obtener los términos y el recuento de las ocurrencias, ¿es esto lo que desea?
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.
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 habilitada en esa tabla y 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