Аннотация

SQL Server 7,0 или более поздней версии. Поиск по полнотекстовому тексту (FTS) предоставляет широкий набор функциональных возможностей поиска. Вы можете использовать предложение CONTAINS для выполнения различных операций поиска, например:

  • Слово или фраза.

  • Префикс слова или фразы.

  • Слово, которое находится рядом с другим словом.

  • Слово, которое создается с помощью перегибов. Например, слово "диск" — это элемент, который является предметом: накопителей, приводами, управляемостью и данными.

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

В синтаксисе CONTAINS заключаются двойные кавычки для префикса ("Choc *"), а также несколько поисков в Word или фразах ("Шоколадная микросхема" или "oatmeal"). Это может представлять проблему с точки зрения дизайна пользовательского интерфейса, так как пользователи не могут правильно заключать свои запросы на поиск и полагаться на ошибки. Простая функция требуется, чтобы разработчики могли правильно заключать в кавычки строку запроса перед ее передачей в SQL Server.

Дополнительная информация

Ниже приводится обзор синтаксиса полнотекстового запроса с помощью ключевого слова CONTAINS в предложении WHERE (более полный синтаксис можно найти в книге SQL Server 7,0 Books Online).

  • Простой термин:

    WHERE CONTAINS(QuantityPerUnit, 'bottles')
  • Фраза в простом термине:

    WHERE CONTAINS(ProductName, ' "Sasquatch ale" OR "steeleye stout" ')
  • Префиксный термин:

    WHERE CONTAINS(ProductName, ' "choc*" ')
  • ИЛИ с префиксным термином:

    WHERE CONTAINS(Description, '"sea*" OR "bread*"')
  • Термин близкого взаимодействия:

    WHERE CONTAINS(ProductName, 'spread NEAR Boysenberry')
  • Условия генерации:

    WHERE CONTAINS(ProductName, ' FORMSOF (INFLECTIONAL, dry) ')
  • Взвешенный термин:

    WHERE CONTAINS(Description, 'ISABOUT (spread weight (.8), 1)

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

  • Отдельные слова и фразы можно заключать в двойные кавычки (за исключением близких, созданных и взвешенных терминов).

  • Поиск префиксов терминов должен быть заключен в двойные кавычки.

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

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

Replace all double quotes (clears the text and any improper quotations)   If the text string contains one of the key words "NEAR", "FORMSOF", or    "ISABOUT", the parsing is complete   Else      Surround any instances of 'and' or 'and not' with quotes      Surround any instances of 'or' or 'or not' with quotes      Surround the entire string with quotes

Ниже приведена версия JavaScript.

function fxnParseIt() {// Note: sInputString code for demo purposes only, and should be//   replaced with user's code for getting in string value.var sInputString = 'asp and database';sText = sInputString;sText = sText.replace(/"/g,"");if (sText.search(/(formsof|near|isabout)/i) == -1) {sText = sText.replace(/ (and not|and) /gi,'" $1 "');sText = sText.replace(/ (or not|or) /gi,'" $1 "');sText = '"' + sText + '"';}sInputString = sText;}

Ниже приведена версия сценария VBScript.

Sub ParseIt()      '// Note: sInputString code for demo purposes only, and should be      '/replaced with user's code for getting in string value.      '// Note: this code could also be easily re-written as a function,      '/        and is written as a sub for demo purposes only.      Dim strIn, RegEx, sInput      sInputString = "asp and database"      strIn = sInput      Set RegEx = New RegExp      If Len(strIn) < 1 Then            MsgBox ("You must enter a search string")      Else            strIn = Replace(strIn, Chr(34), "")            If (InStr(strIn, "formsof") > 0) Or (InStr(strIn, "near") > 0) Or (InStr(strIn, "isabout") > 0) Then                  ParseMe.value = strIn            Else                  RegEx.IgnoreCase = True                  RegEx.Global = True                  RegEx.Pattern = "( and not | and )"                  strIn = RegEx.Replace(strIn, Chr(34) & "$1" & Chr(34))                  RegEx.Pattern = "( or not | or )"                  strIn = RegEx.Replace(strIn, Chr(34) & "$1" & Chr(34))                  strIn = Chr(34) & strIn & Chr(34)                  ParseMe.value = strIn            End If      End IfEnd Sub

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?

Спасибо за ваш отзыв!

×