पूर्ण पाठ खोज क्वेरी में उद्धरण चिह्न ठीक प्रकार से पार्स करने के लिए कैसे


सारांश


SQL Server 7.0 या बाद के संस्करण पूर्ण पाठ खोज (FTS) खोज कार्यक्षमता का कोई रिच सेट उपलब्ध कराता है। क्या करता है खंड, खोजों के विभिन्न प्रकार जैसे करने के लिए उपयोग कर सकते हैं:

  • कोई शब्द या वाक्यांश।
  • कोई शब्द या पदबंध का उपसर्ग है।
  • एक शब्द जो किसी दूसरे शब्द के पास है।
  • एक शब्द जो inflectionally किसी अन्य से उत्पन्न होता है। उदाहरण के लिए, शब्द "ड्राइव" inflectional तना का है: ड्राइव, ड्राइविंग, drove, और चालित।
  • एक शब्द अन्य शब्द से ऊपर निर्दिष्ट भार है।
उपसर्ग ("choc *") और एकाधिक शब्द या वाक्यांश खोज ("चॉकलेट चिप" या "बीमार") के लिए दोहरे उद्धरण चिह्न करता है सिंटैक्स की आवश्यकता है। उपयोगकर्ता उनके खोज ठीक से उद्धृत करने के लिए आयोजित करने के लिए accustomed नहीं हैं और जब वे गलतियाँ करने के लिए होती है, क्योंकि यह UI डिज़ाइन में, समस्या पैदा करने वाले हो सकते हैं। SQL सर्वर पर पहुँचने से पहले कोई क्वेरी स्ट्रिंग ठीक से उद्धृत करने के लिए डेवलपर्स उपयोग कर सकते हैं एक साधारण कार्य की आवश्यकता है।

अधिक जानकारी


निम्नलिखित की समीक्षा करता है जहाँ खंड में कीवर्ड के साथ पूर्ण-पाठ क्वेरी सिंटैक्स की मूल बातें की है (और पूर्ण सिंटैक्स के लिए, 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
एक जावास्क्रिप्ट संस्करण निम्न है:

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 If

End Sub