Получение терминов с полным текстом SQL Server

Используя Lucene, можно получить термины, содержащиеся внутри индекса, т.е. уникальные слова, исключающие стоп-слова, которые содержат документы в индексе. Это полезно для создания предложений автозаполнения, среди прочего. Возможно ли подобное с полными текстовыми индексами MS SQL Server?

Ответы

Ответ 1

Вы можете использовать новое системное представление в SQL Server 2008, чтобы получить условия и количество вхождений, это то, что вы хотите?

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

Вам нужно предоставить db_id и object_id таблицы полного текста. Это ссылка MSDN для этого.

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

Ответ 2

Я согласен с тем, что эта информация (слова в индексе, слова с ограничениями и т.д.) полезна - и если SQL Server серьезно относится к предложению платформы, эта информация должна быть раскрыта. Насколько я могу судить, он действительно недоступен в предыдущих версиях. Однако игра меняется в SQL Server 2008.

SQL Server 2008 предлагает новые виды динамического управления, которые предлагают эти метаданные для полного текста. Обратите особое внимание на sys.dm_fts_parser и sys.dm_fts_index_keywords.

В представлении sys.dm_fts_parser используется фраза вместе с несколькими другими параметрами и выводится таблица, показывающая набор строк, показывающий исходные версии отдельных слов после того, как слово breaker считает их отдельными словами.

MSDN предоставляет пример этого запроса для представления:

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

Чтобы получить ключевые слова, вы можете использовать sys.dm_fts_index_keywords.

Надеюсь, это наводит вас в правильном направлении. Приветствия.

Ответ 3

Со следующим вы можете взять имя таблицы и имя столбца в качестве переменных. Он будет работать над текущей базой данных, в которой он запускается, опускает результаты конца файла и заказывает результаты, спускающиеся по количеству вхождений.

Обратите внимание, что полная индексация текста должна быть включена в этой таблице и столбце

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

Ответ 4

sys.dm_fts_index_keywords возвращает список индексированных терминов с дополнительной статистикой, а не список шумовых слов, которые извлекаются с помощью sys.fulltext_stopwords.