2009-11-26 9 views
9

के साथ कंटेनटेबल और बुलियन तर्क वाले एकाधिक कॉलम मेरे पास एक बहुत ही बुनियादी परिदृश्य है, लेकिन जो मैंने पढ़ा है, वह ऐसा लगता है कि SQL सर्वर पूर्ण टेक्स्ट कैटलॉग और अनुक्रमणिका का उपयोग करना आसान नहीं है।पूर्ण टेक्स्ट इंडेक्स

मेरे पास 2 कॉलम, पहला और अंतिम नाम है। मैं उन पर पूर्ण-पाठ खोज का समर्थन करना चाहता हूं जैसे कि अगर कोई व्यक्ति "जॉन स्मिथ" पर एक मैच वाले लोगों को दोनों पहले और आखिरी बार आते हैं।

हालांकि एकाधिक कॉलम में एक इंडेक्स बनाना आसान है, और कई कॉलम खोजना आसान है, स्कोरिंग एकाधिक कॉलम को प्रतिबिंबित नहीं करती है।

SELECT [Key], Rank 
FROM CONTAINSTABLE([User], (FirstName,LastName), '<CLAUSE_HERE>') 
  1. तो CLAUSE_HERE है "जॉन स्मिथ" मैं कोई परिणाम नहीं मिलता है, क्योंकि उस वाक्यांश या तो क्षेत्र में मौजूद नहीं है।
  2. यदि यह "जॉन या स्मिथ" है तो मुझे सभी उपयोगकर्ताओं को या तो किसी भी क्षेत्र में नाम मिलता है, जो एक अनुपयोगी क्रम में क्रमबद्ध होता है।
  3. यदि यह "जॉन और स्मिथ" है तो मुझे कोई परिणाम नहीं मिलता है, क्योंकि न तो फ़ील्ड में दोनों शब्द होते हैं।

लगता है जैसे एकमात्र समाधान एक प्रश्न है कि प्रत्येक क्षेत्र पर containstable चलाता autogenerate के लिए है, कुछ गणित करता है, स्कोर का योग, आदि कि ध्वनि सही है? क्या इसके चारों ओर एक आसान तरीका है? मेरी वास्तविक क्वेरी में इसके लिए बहुत अधिक फ़ील्ड हैं - यह एक सरल उदाहरण है।

उत्तर

11

computed column बनाएं जो उन क्षेत्रों को एक साथ जोड़ता है जिन्हें आप खोज में रुचि रखते हैं (इस तरह से आपके खोज प्रारूपों के लिए समझ में आता है), और पूर्ण-पाठ अनुक्रमणिका।

जहां तक ​​मुझे पता है कि यह एकमात्र काम है यदि आप अपने प्रश्न में वर्णित व्यवहार के कारण इस तरह से पूर्ण-पाठ करना चाहते हैं।

+0

पूरी तरह से काम किया !! पूर्ण पाठ यह स्वचालित रूप से क्यों नहीं करता है? मैंने सोचा कि एकाधिक कॉलम पर पूर्ण पाठ लागू करना इस आउट ऑफ़ द बॉक्स की तरह काम करेगा। अनुमान नहीं। –

0

आपको इसका परीक्षण करने की आवश्यकता होगी, लेकिन मुझे आश्चर्य है कि क्या आप प्रत्येक कीवर्ड को वजन लागू करने के लिए ISABOUT() फ़ंक्शन का उपयोग करने में सक्षम हो सकते हैं। आपका खोज खंड कुछ ऐसा दिख सकता है:

ISABOUT(john weight(0.2), smith weight(0.8)) 
+0

कोई बुरा विचार नहीं है, लेकिन यह काम नहीं करता है। जिस तरह स्कोरिंग कार्य कॉलम में योग नहीं होता है। तो, "जॉन स्मिथ" को मेरे परीक्षणों में "जॉन जोन्स" के समान स्कोर मिलता है। –

+0

SQL सर्वर का कौन सा संस्करण आप उपयोग कर रहे हैं? क्या आपके पास नमूना/टेस्ट स्क्रिप्ट है? – RickNZ

संबंधित मुद्दे