如何在完整的文字搜尋查詢中正確地分析引號

摘要

SQL Server 7.0 或更新版本的完整文字搜尋(FTS)提供一組豐富的搜尋功能。 您可以使用 CONTAINS 子句來執行各種搜尋,例如:

  • 單字或片語。

  • 單字或片語的前置詞。

  • 在其他單字附近的文字。

  • 從另一個 inflectionally 產生的文字。 例如,「磁片磁碟機」一詞就是磁碟機、驅動、驅動和驅動的 inflectional 詞幹。

  • 其指定權高於其他單字的文字。

[內含] 語法需要在前置詞("choc *")和多個字或片語搜尋("巧克力晶片" 或 "oatmeal")中輸入雙引號。 這可能會因 UI 設計而產生問題,因為使用者不習慣要正確地對其進行搜尋,而且很容易在問題發生時產生錯誤。 您需要有一個簡單的函數,開發人員可以在將查詢字串傳遞給 SQL Server 前,先使用它來正確地對其進行引用。

其他相關資訊

以下是使用 WHERE 子句中包含關鍵字的全文查詢語法基本概念(如需更完整的語法,請參閱 SQL Server 7.0 線上圖書):

  • 簡單的詞彙:

    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

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×