Семантический поиск (SQL Server)

Tsql теория > Семантический поиск (SQL Server)
13.02.2013 15:20:52



Статья:

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

Запросы к этим семантическим индексам создаются с помощью трех функций наборов строк языка Transact-SQL для получения результатов в виде структурированных данных.

Семантический поиск основан на существующей функции полнотекстового поиска в SQL Server, но дает новые возможности, выходящие за пределы поиска ключевых слов. Полнотекстовый поиск позволяет запрашивать слова в документе, а семантический поиск позволяет запрашивать значение документа. Среди новых возможностей автоматическое извлечение тегов, обнаружение связанного содержимого и иерархическая навигация по схожему содержимому.Например, можно запросить индекс ключевых фраз, чтобы создать классификацию для организации или совокупности документов. Или можно запросить индекс сходства документов для выявления резюме, соответствующих описанию вакансии.

Следующие примеры демонстрируют возможности семантического поиска.

Найти ключевые фразы в документе

Следующий запрос получает ключевые фразы, которые были определены в образце документа. Он возвращает список результаты в порядке убывания показателя, обозначающего статистическую значимость каждой ключевой фразы. Этот запрос вызывает функцию semantickeyphrasetable (Transact-SQL).

SET @Title = 'Sample Document.docx'

SELECT @DocID = DocumentID
    FROM Documents
    WHERE DocumentTitle = @Title

SELECT @Title AS Title, keyphrase, score
    FROM SEMANTICKEYPHRASETABLE(Documents, *, @DocID)
    ORDER BY score DESC

Найти схожие или связанные документы

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

SET @Title = 'Sample Document.docx'

SELECT @DocID = DocumentID
    FROM Documents
    WHERE DocumentTitle = @Title

SELECT @Title AS SourceTitle, DocumentTitle AS MatchedTitle,
        DocumentID, score
    FROM SEMANTICSIMILARITYTABLE(Documents, *, @DocID)
    INNER JOIN Documents ON DocumentID = matched_document_key
    ORDER BY score DESC

В НАЧАЛО

Найти ключевые фразы, делающие документы схожими или связанными

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

SET @SourceTitle = 'first.docx'
SET @MatchedTitle = 'second.docx'

SELECT @SourceDocID = DocumentID FROM Documents WHERE DocumentTitle = @SourceTitle
SELECT @MatchedDocID = DocumentID FROM Documents WHERE DocumentTitle = @MatchedTitle

SELECT @SourceTitle AS SourceTitle, @MatchedTitle AS MatchedTitle, keyphrase, score
    FROM semanticsimilaritydetailstable(Documents, DocumentContent,
        @SourceDocID, DocumentContent, @MatchedDocID)
    ORDER BY score DESC

Как создать семантический индекс, если есть полнотекстовый индекс

Для добавления семантического индексирования при изменении существующего полнотекстового индекса используется инструкция ALTER FULLTEXT INDEX.Также можно добавить семантическое индексирование с помощью различных диалоговых окон в Среда SQL Server Management Studio.

Добавление семантического индекса с помощью Transact-SQL

Вызовите инструкцию ALTER FULLTEXT INDEX с описанными далее параметрами для каждого столбца, для которого требуется добавить семантический индекс. Дополнительные сведения о параметрах этой инструкции см. в разделе ALTER FULLTEXT INDEX (Transact-SQL).

Если не указано иное, полнотекстовый и семантический индексы после вызова инструкции ALTER повторно заполняются.

  • Чтобы добавить в столбец только полнотекстовое индексирование, используйте синтаксис ADD.

  • Чтобы добавить в столбец и полнотекстовое и семантическое индексирование, используйте синтаксис ADD с параметромSTATISTICAL_SEMANTICS.

  • Чтобы добавить семантическое индексирование в столбец, для которого уже включено полнотекстовое индексирование, укажите параметр ADD STATISTICAL_SEMANTICS. В рамках одной инструкции ALTER семантический индекс можно добавить только в один столбец.

Пример: Добавление семантического индексирования в столбец, в котором уже есть полнотекстовое индексирование

В следующем примере выполняется изменение существующего полнотекстового индекса в таблице Production.Document из образца базы данных AdventureWorks2012. Пример добавляет семантический индекс для столбца Document таблицы Production.Document, для которого уже существует полнотекстовый индекс. В примере указывается, что повторное заполнение индекса не будет выполняться автоматически.

ALTER FULLTEXT INDEX ON Production.Document
    ALTER COLUMN Document
        ADD Statistical_Semantics
    WITH NO POPULATION
GO
Добавить семантический индекс с помощью среды SQL Server Management Studio

Изменение столбцов, для которых включен семантический или полнотекстовый индекс, выполняется на странице Столбцы полнотекстового индексадиалогового окна Свойства полнотекстового индекса. Дополнительные сведения см. в разделе Управление полнотекстовыми индексами.

Как проверить, включен ли семантический поиск по объектам базы данных

Включен ли семантический поиск для базы данных?

Выполните запрос к свойству IsFullTextEnabled функции метаданных DATABASEPROPERTYEX (Transact-SQL).

Возвращаемое значение 1 указывает, что полнотекстовый поиск и семантический поиск для базы данных включены; возвращаемое значение 0 указывает, что они не включены.

SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled')
GO
Включен ли семантический поиск для таблицы?

Выполните запрос к свойству TableFullTextSemanticExtraction функции метаданных OBJECTPROPERTYEX (Transact-SQL).

Возвращаемое значение 1 указывает, что семантический поиск для таблицы включен; возвращаемое значение 0 указывает, что он не включен.

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO
Включен ли семантический поиск для столбца?

Чтобы определить, включен ли семантический поиск для определенного столбца, выполните следующие действия.

  • Выполните запрос к свойству StatisticalSemantics функции метаданных COLUMNPROPERTY (Transact-SQL).

    Возвращаемое значение 1 указывает, что семантический поиск для столбца включен; возвращаемое значение 0 указывает, что он не включен.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics')
    GO
    
  • Выполните запрос к представлению каталога sys.fulltext_index_columns (Transact-SQL), чтобы получить полнотекстовый индекс.

    Значение 1 в столбце statistical_semantics указывает, что для данного столбца, кроме полнотекстового индексирования, включено и семантическое индексирование.

    SELECT * FROM sys.fulltext_index_columns WHERE object_id = OBJECT_ID('table_name')
    GO
    
  • В обозревателе объектов Management Studio щелкните правой кнопкой мыши столбец и выберите пункт Свойства. На странице Общиедиалогового окна Свойства столбца проверьте значение свойства Статистическая семантика.

    Значение True указывает, что для данного столбца, кроме полнотекстового индексирования, включено и семантическое индексирование.