Загальні відомості
SQL Server 7,0 або пізніша версія повнотекстового пошуку (FTS) містить Багатий набір функцій пошуку. Ви можете скористатися пунктом МІСТИТЬ речення, щоб виконувати різноманітні пошукові запити, наприклад:
-
Слово або фразу.
-
Префікс слова або фрази.
-
Слово, яке стоїть поруч із іншим словом.
-
Слово, яке можна створити в іншому документі. Наприклад, слово "диск" – це відповідне стебло: диски, поїхали, водіння та керовані.
-
Слово, яке має вищий рівень, що призначається, ніж інше слово.
Синтаксис має подвійні лапки для префікса ("Choc *") і для кількох пошуків слів або фраз ("шоколадна фішка" або "вівсянка"). Це може бути проблематично з точки зору дизайну інтерфейсу користувача, тому що користувачі не звикли належним чином цитувати свої пошукові запити та схильні робити помилки, коли вони роблять. Потрібна проста функція, яку розробники можуть використовувати для правильного пропонування рядка запиту, перш ніж передати його до сервера 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