2011-04-18 15 views
5

में पूर्ण पूर्ण पाठ खोज मैं PostgreSQL के लिए नया हूं, और मुझे यकीन नहीं है कि निष्पादन पूर्ण-पाठ खोज करने के बारे में कैसे जाना है। यह नहीं कि यह बहुत मायने रखता है, लेकिन मैं Django का उपयोग कर रहा हूँ। दूसरे शब्दों में, मैं निम्नलिखित की तरह कुछ के लिए देख रहा हूँ:PostgreSQL और Django

q = 'hello world' 
queryset = Entry.objects.extra(
    where=['body_tsv @@ plainto_tsquery(%s)'], 
    params=[q]) 
for entry in queryset: 
    print entry.title 

जहाँ मैं एंट्री में या तो ठीक 'हैलो दुनिया', या कुछ इसी तरह शामिल करना चाहिए। तब लिस्टिंग को आदेश दिया जाना चाहिए कि उनके मूल्य निर्दिष्ट स्ट्रिंग से कितना दूर है। उदाहरण के लिए, मैं क्वेरी को "हैलो वर्ल्ड", "हैलो वर्ल्ड", "helloworld", "hell world" इत्यादि वाली प्रविष्टियों को शामिल करना चाहता हूं, कुछ प्रकार की रैंकिंग के साथ यह इंगित करता है कि प्रत्येक आइटम सही से कितना दूर है, अपरिवर्तित क्वेरी स्ट्रिंग।

आप यह करने के बारे में कैसे जाएंगे?

उत्तर

2

आपकी सर्वश्रेष्ठ शर्त Django raw querysets का उपयोग करना है, मैं इसे पूर्ण पाठ मिलान करने के लिए MySQL के साथ उपयोग करता हूं। यदि डेटा डेटाबेस में है और पोस्टग्रेस मिलान क्षमता प्रदान करता है तो इसका उपयोग करना समझ में आता है। प्लस पोस्टग्रेस पूर्ण पाठ प्रश्नों के साथ स्टेमिंग आदि के मामले में कुछ वास्तव में उपयोगी चीजें प्रदान करता है।

असल में यह आपको वास्तविक क्वेरी लिखने देता है जिसे आप अभी तक मॉडल लौटाते हैं (जब तक आप एक मॉडल तालिका को स्पष्ट रूप से पूछ रहे हों)।

लाभ यह देता है आपको लगता है कि आप सटीक क्वेरी आप Postgres में पहली का उपयोग किया जाएगा परीक्षण कर सकते हैं है, the documentation बहुत अच्छी तरह से पूरा टेक्स्ट क्वेरी शामिल हों।

इस समय कच्चे क्वेरीसेट के साथ मुख्य गोचा यह है कि वे गिनती का समर्थन नहीं करते हैं। तो यदि आप बहुत सारे डेटा लौट रहे होंगे और आपके एप्लिकेशन पर मेमोरी बाधाएं हैं तो आपको कुछ चालाक करने की आवश्यकता हो सकती है।


"अचूक" मिलान हालांकि पूरी पाठ खोज क्षमताओं का हिस्सा नहीं है। इसके बजाय आप पोस्टग्रेज़ fuzzystrmatch contrib मॉड्यूल चाहते हैं। इसका उपयोग इंडेक्स के साथ described here है।

1

इस उद्देश्य के लिए एक खोज इंजन का उपयोग करना सबसे अच्छा होगा। Django-haystack तीन अलग-अलग खोज इंजनों के एकीकरण का समर्थन करता है।