2010-08-07 15 views
7

मैं नीचे क्वेरी का उपयोग कर रहा पूर्ण पाठ-खोज का उपयोग करके तालिका में ही परिणाम है। SQL2000 में यह एक तालिका में एक या सभी स्तंभों खोज करने के लिए संभव ही नहीं था। क्या यह एसक्यूएल 2008 में संभव है?एसक्यूएल सर्वर पूर्ण पाठ-खोजें FREETEXTTABLE खोज एकाधिक स्तंभों

मैं दो तालिकाओं, समस्या और समाधान (दोनों अनुक्रमित और एक ही तालिका में) खोज करना चाहते हैं:

DECLARE @topRank int set @topRank=(SELECT MAX(RANK) 
FROM FREETEXTTABLE([Support_Calls], Problem, 'test', 1)) 
SELECT [ID] AS [Call No],Company_Name, Problem, Solution, CONVERT(VARCHAR(20),CAST((CAST(ftt.RANK as DECIMAL)/@topRank * 100) AS DECIMAL(13,0))) + '%' as Match 
FROM [Support_Calls] INNER JOIN FREETEXTTABLE([Support_Calls], Problem, 'test') as ftt ON ftt.[KEY]=[ID] ORDER BY ftt.RANK DESC; 

मैं क्या देख सकते हैं FREETEXTTABLE एक स्तंभ की तुलना में अधिक स्वीकार नहीं करता है?

उत्तर

12

आप उन्हें कोष्ठक में निर्दिष्ट; FREETEXTTABLE(tablename, (col1,col2,col3), 'expr') या इंडेक्स में सभी कॉलम को सीच करने के लिए तारांकन का उपयोग करें।

+1

तारांकन के बिना तारांकन प्रदर्शन को नुकसान पहुंचाएगा, हालांकि, अगर विवेक के बिना उपयोग किया जाता है? – Tobiasopdenbrouw

+1

हां वास्तव में, अगर इंडेक्स में कोई कॉलम है जिसकी आपको परवाह नहीं है। –

0

From MSDN,

निर्दिष्ट में, शून्य की एक मेज, एक, या उन मूल्यों कि अर्थ से मेल के लिए चरित्र आधारित डेटा प्रकार वाले कॉलम के लिए अधिक पंक्तियाँ, लेकिन नहीं सटीक शब्द रिटर्न पाठ की freetext_string। FREETEXTTABLE को केवल एक नियमित विवरण नाम जैसे SELECT कथन के FROM खंड में संदर्भित किया जा सकता है। FREETEXTTABLE freetext प्रकार पूर्ण-पाठ क्वेरी का प्रासंगिकता रैंकिंग मूल्य (रैंक) और पूर्ण-पाठ कुंजी (key) प्रत्येक पंक्ति के लिए वापस जाने के निर्दिष्ट उपयोग करते हुए प्रश्नों।

FREETEXTTABLE (table , { column_name | (column_list) | * } 
      ,'freetext_string' 
    [ , LANGUAGE language_term ] 
    [ ,top_n_by_rank ]) 

तो हाँ, क्या एलेक्स लालकृष्ण रूप में अच्छी तरह से कहा:

वे निम्न सिंटैक्स दे।

0

आप विभिन्न स्तंभों पर एक प्रतिलिपि प्राप्त सूचकांक बनाया है, तो आप साधारण से उपयोग किया गया कर सकते हैं या उनमें से एक, उन सभी को, या उनमें से कुछ पर देखने के लिए FREETEXT। इस तरह:

SELECT * 
FROM YourTable 
WHERE CONTAINS(*, @SearchTerm); 

If you want to look on all the columns that are included in the FULLTEXT INDEX. or: 

SELECT * 
FROM YourTable 
WHERE CONTAINS((ProductName, ProductNumber, Color), @SearchTerm); 

कॉलम आप खोज करना चाहते निर्दिष्ट करने के लिए चाहते हैं। यदि आपको परिणामों को एक कॉलम में चाहिए, तो आपको यूनियन करना होगा और प्रत्येक कॉलम की तलाश करना होगा जिसे आप खोजना चाहते हैं।

SELECT * 
FROM YourTable 
WHERE CONTAINS(ProductName, @SearchTerm) 
UNION 
SELECT * 
FROM YourTable 
WHERE CONTAINS(ProductNumber, @SearchTerm) 
UNION 
SELECT * 
FROM YourTable 
WHERE CONTAINS(Color, @SearchTerm) 
+1

मैं अगर मैं शब्द के केवल एक हिस्से की जरूरत है, लेकिन अभी भी पूर्ण शब्द प्रदर्शित करेगा कैसे करना होगा? जैसे कि खोज मूल्य 'कर्ट' है, खोज परिणाम' पर्दा, कर्टिस, कर्टमैन ... 'होगा – Rich

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