Поиск слов близких к другим с использованием оператора NEAR

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Выражение с учетом расположенияNEAR может применяться в предикате CONTAINS или функции CONTAINSTABLE для поиска слов или фраз, расположенных рядом.

Обзор NEAR

NEAR обладает следующими функциями:

  • Вы можете указать максимальное количество слов, исключаемых из поиска и разделяющих первое и последнее из искомых слов.

  • Вы можете искать слова или фразы в произвольном или в определенном порядке.

  • Можно указывать максимальное число слов, которые не включаются в поиск, или максимальное расстояние, которое может разделять первое и последнее слово поиска для возвращения результата.

  • Если указать максимальное число слов, также можно указать, что слова поиска должны присутствовать в результате в заданном порядке.

Строка текста должна выполнять следующие условия.

  • Начинаться с одного из указанных слов поиска и заканчиваться одним из других указанных слов поиска.

  • Содержать все указанные слова поиска.

  • Число слов, исключаемых из поиска (включая стоп-слова), которые могут разделять первое и последнее слово поиска, должно быть меньше максимального расстояния или равно ему, если оно указано.

Синтаксис NEAR

Базовый синтаксис NEAR:

 NEAR (  
  
 {  
  
 *search_term* [ ,...*n* ]  
  
 |  
  
 (*search_term* [ ,...*n* ] ) [, <maximum_distance> [, <match_order> ] ]  
  
 }  
  
 )  

Дополнительные сведения о синтаксисе см. в разделе CONTAINS (Transact-SQL).

Примеры

Пример 1

Например, можно искать слово «John», расположенное не далее двух слов от слова «Smith», следующим образом.

... CONTAINS(column_name, 'NEAR((John, Smith), 2)')

Примеры строк, удовлетворяющих этому запросу: «John Jacob Smith» и «Smith, John». В строке «John Jones knows Fred Smith» слова поиска разделены тремя другими словами, поэтому она не является результатом.

Чтобы задать необходимый порядок слов, нужно изменить выражение с учетом расположения из примера на NEAR((John, Smith),2, TRUE). В этом случае словоJohnдолжно располагаться не далее двух слов от словаSmith, но только в случае, если словоJohnстоит перед словомSmith. В языке с направлением чтения слева направо (например, в английском) этому запросу отвечает, например, строкаJohn Jacob Smith.

Для языка с направлением чтения справа налево (например, арабского или иврита) средство полнотекстового поиска применяет заданные выражения в обратном порядке. Кроме того, обозреватель объектов в SQL Server Management Studio автоматически изменяет порядок отображения слов, указанных в языках справа налево.

Пример 2

В следующем примере в таблице Production.Document образца базы данных AdventureWorks выполняется поиск всех сводок по документам, где слово reflector содержится в одном документе со словом bracket.

SELECT DocumentNode, Title, DocumentSummary  
FROM Production.Document AS DocTable   
INNER JOIN CONTAINSTABLE(Production.Document, Document,  
  'NEAR(bracket, reflector)' ) AS KEY_TBL  
  ON DocTable.DocumentNode = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK > 50  
ORDER BY KEY_TBL.RANK DESC;  
GO  

Измерение максимального расстояния

Максимальное расстояние, например 10 или 25, определяет, сколько слов, которые не включаются в поиск, включая стоп-слова, могут разделять первое и последнее слово поиска в заданной строке. Например, выражение NEAR((dogs, cats, "hunting mice"), 3) возвращает следующую строку, в которой общее число слов, которые не включаются в поиск, равно трем (enjoy,butиavoid):

"Catsenjoyhunting mice``, but avoiddogs``."

То же выражение с учетом расположения не вернет следующую строку, поскольку число слов, которые не включаются в поиск, равно четырем (enjoy,but,usuallyиavoid), что превышает максимальное расстояние:

"Catsenjoyhunting mice``, but usually avoiddogs``."

Сочетание NEAR с другими выражениями

NEAR можно сочетать с некоторыми другими выражениями. Операторы AND (&), OR (|) и AND NOT (&!) позволяют сочетать настраиваемое выражение с учетом расположения с другим настраиваемым выражением с учетом расположения, простым выражением или префиксным выражением. Например:

  • CONTAINS('NEAR((выражение1, выражение2),5) AND выражение3')

  • CONTAINS('NEAR((выражение1, выражение2),5) OR выражение3')

  • CONTAINS('NEAR((выражение1, выражение2),5) AND NOT выражение3')

  • CONTAINS('NEAR((выражение1, выражение2),5) AND NEAR((выражение3, выражение4),2)')

  • CONTAINS('NEAR((выражение1, выражение2),5) OR NEAR((выражение3, выражение4),2, TRUE)')

Например,

CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')  

NEAR нельзя сочетать с производным выражением (ISABOUT ...T) или взвешенным выражением (FORMSOF ...).

Дополнительные сведения о поиске близкого взаимодействия

  • Перекрывающиеся экземпляры слов поиска

    В запросе с учетом расположения всегда ищутся только неперекрывающиеся экземпляры. Перекрывающиеся экземпляры слов поиска никогда не включаются в результаты. Например, рассмотрим следующие выражение с учетом расположения, которое ищет словаAиAAв заданном порядке на расстоянии не более двух слов:

    CONTAINS(column_name, 'NEAR((A,AA), 2, TRUE)')
    

    Возможные результаты:AAA,A.AAиA..AA. Строки, содержащие толькоAA, не будут результатом.

    Примечание.

    Можно указывать перекрывающиеся выражения, например NEAR("mountain bike", "bike trails") или (NEAR(comfort*, comfortable), 5). Указание перекрывающихся выражений повышает сложность запроса за счет увеличения числа возможных перестановок. Если указать большое число таких перекрывающихся выражений, запрос может исчерпать ресурсы и завершиться с ошибкой. В этом случае упростите запрос и повторите попытку.

  • В NEAR (независимо от указания максимального расстояния) указывается логическое, а не абсолютное расстояние между выражениями. Например, выражения, находящиеся в различных фразах и выражениях в пределах абзаца, считаются более удаленными друг от друга, чем фразы, находящиеся в одной фразе или в одном предложении, независимо от фактического расстояния между ними, поскольку предполагается, что в первом случае выражения в меньшей степени связаны. Аналогично выражения из различных абзацев считаются еще более удаленными друг от друга. Если в результат входит конец предложения, абзаца или главы, то интервал, используемый для определения ранга документа, увеличивается соответственно на 8, 128 или 1024.

  • Влияние выражений с учетом расположения на ранжирование, выполняемое функцией CONTAINSTABLE

    Если выражение NEAR используется в функции CONTAINSTABLE, то на ранг документа влияет число совпадений в документе относительно его длины, а также расстояние между первым и последним выражением поиска в каждом совпадении. Для универсального термина близкого взаимодействия, если соответствующие термины поиска имеют 50 логических терминов, то ранг, возвращаемый в документе, равен >0. Для пользовательского термина близкого взаимодействия, не указывающего целое число в качестве максимального расстояния, документ, содержащий только попадания, разрыв которых составляет >100 логических терминов, получит рейтинг 0. Дополнительные сведения о ранжировании настраиваемых поисковых запросов с учетом расположения см. в разделе Ограничение количества результатов поиска с использованием функции RANK.

  • Параметр сервера transform noise words

    Значение шумовых слов преобразования влияет на то, как SQL Server обрабатывает стоп-слова, если они указаны в поисках близкого взаимодействия. Дополнительные сведения см. в разделе transform noise words Server Configuration Option.

См. также

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Запросы с полнотекстовым поиском