9

मैं प्रत्येक शब्द को खोजने में सक्षम होना चाहता हूं इसलिए मैंने स्टॉप शब्द सूची को मंजूरी दे दी है। मैंने इंडेक्स का पुनर्निर्माण किया है। लेकिन दुर्भाग्य से यदि मैं इसमें स्टॉप शब्द के साथ एक खोज अभिव्यक्ति टाइप करता हूं तो यह अभी भी कोई पंक्ति नहीं देता है। अगर मैं सिर्फ स्टॉप शब्द छोड़ देता हूं तो मुझे परिणाम मिलते हैं। जैसे "डबल पहनने के स्थान पर रहें" - कोई नतीजा नहीं, "डबल पहनने की जगह रहें" - मुझे ऐसे परिणाम मिलते हैं जिनमें वास्तव में "इन" भी होता है।स्टॉप शब्द सूची खाली होने पर भी पूर्ण पाठ खोज काम नहीं करती है, भले ही शब्द शब्द खाली है

क्या कोई जानता है कि यह क्यों हो सकता है? मैं एसक्यूएल सर्वर 2012 एक्सप्रेस का उपयोग कर रहा हूँ।

बहुत बहुत धन्यवाद!

उत्तर

23

इस बीच मैंने इस मुद्दे को हल करने में कामयाब रहा है। समस्या यह थी कि मेरी अपनी स्टॉप सूची थी जो वास्तव में खाली थी लेकिन मेरी पूर्ण टेक्स्ट सूची मेरी खुद की स्टॉपलिस्ट के साथ नहीं बल्कि सिस्टम के साथ जुड़ी हुई थी।

select * from sys.fulltext_stopwords 

क्वेरी स्टॉप सूची (प्रणाली वापस नहीं देता: यहाँ stopword और पूर्ण पाठ खोज मुद्दों को सुलझाने के लिए उपयोगी प्रश्नों की एक जोड़ी हैं: (! वापस प्रणाली वाले नहीं देता है)

क्वेरी stopwords सूचीबद्ध करें):!

select * from sys.fulltext_stoplists 

चेक क्या शब्द सूची में शामिल हैं:

SELECT * FROM sys.dm_fts_index_keywords(DB_ID('dbname'), OBJECT_ID('tablename')) 

संघ की जाँच करें:

select fulltext_catalog_id,stoplist_id, * from sys.fulltext_indexes; 

को बंद stoplist:

ALTER FULLTEXT INDEX ON CremeSearchFT SET STOPLIST = OFF 

मुझे आशा है कि यह किसी को मदद मिलती है। :)

+0

क्या आपका मतलब है कि आपकी 'फुलटेक्स्ट कैटलॉग' स्टॉपलिस्ट, या आपकी 'फुलटेक्स्ट इंडेक्स' से जुड़ी नहीं है? मुझे अपनी खुद की स्टॉपलिस्ट में समस्या है। –

3

मेरे शोधों के आधार पर, यह पूर्ण-पाठ सूचकांक स्टॉप-लिस्ट विकल्प से संबंधित है, जो पूर्ण-पाठ सूचकांक के मुख्य गुणों में से एक है। यदि आप इस विकल्प को "सिस्टम" पर सेट करते हैं, तो "सिस्टम स्टॉप लिस्ट" में शामिल सभी कीवर्ड आपके CONTAINS() खंडों के लिए उपलब्ध नहीं होंगे और दुर्भाग्य से ऐसे मामलों के लिए कोई परिणाम सेट नहीं होंगे। समाधान;

इस विकल्प को "OFF" पर सेट करने के लिए जो स्टॉप सूची को बाईपास करेगा, आपकी भाषा सेट में चेक करेगा। उदाहरण के लिए अंग्रेजी में, तुर्की में सेन। इन्हें स्टॉप शब्दों के रूप में चिह्नित किया जाता है और जब तक आप "सिस्टम" विकल्प सेट नहीं करते हैं, तब तक SQL सर्वर इंजन को ऐसी खोजों में शामिल नहीं किया जाएगा। तो, "सिस्टम" विकल्प का उपयोग न करें।

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = OFF 

अपनी खुद की रोक सूची बनाने के लिए: ऐसा करने के लिए, कृपया db पर निम्न स्क्रिप्ट जो अपनी मेज से मौजूद है चलाते हैं। इस मामले में, आप अपने विशेष स्टॉप शब्दों को परिभाषित कर सकते हैं और विशिष्ट स्टॉप सूचियां बना सकते हैं। इसलिए, केवल इन लोगों का इलाज किया जाएगा क्योंकि वे SQL सर्वर इंजन के लिए कोई समझ नहीं पाएंगे। एक बार जब आप इसे बनाने के लिए, आपको निम्न स्क्रिप्ट चला कर इस का उपयोग शुरू कर सकते हैं:

CREATE FULLTEXT STOPLIST myStoplist 

GO 

ALTER FULLTEXT STOPLIST [myStoplist] ADD 'you' LANGUAGE 'English' 

GO 

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = [myStoplist] 

GO 

मुझे आशा है कि इस मदद करता है :) गुड लक ...

0

मामले में किसी को भी रुचि है, मैं apolka के जवाब में जांच संघ क्वेरी बाहर fleshed अधिक स्पष्ट परिणाम देने के लिए:

--Check the association: 
SELECT 
    ft_c.name AS [Catalog], 
    s.name AS [Schema], 
    o.name AS [Table], 
    [StopList] = 
    CASE 
     WHEN ft_i.stoplist_id IS NULL THEN 'None' 
     ELSE ISNULL(ft_sl.NAME, 'System') 
    END 
FROM 
    sys.fulltext_indexes AS ft_i LEFT OUTER JOIN 
    sys.fulltext_stoplists AS ft_sl ON ft_sl.stoplist_id = ft_i.stoplist_id INNER JOIN 
    sys.fulltext_catalogs AS ft_c ON ft_c.fulltext_catalog_id = ft_i.fulltext_catalog_id INNER JOIN 
    sys.objects AS o ON o.object_id = ft_i.object_id INNER JOIN 
    sys.schemas AS s ON s.schema_id = o.schema_id 

तो मूर्खतापूर्ण इस सामग्री SSMS से लापता है!