मेरे पास एक बड़ा डेटाबेस (16M पंक्तियाँ) हैं जिनमें छवियों के अवधारणात्मक हैश हैं।
मैं उचित समयावधि में दूरी तय करके पंक्तियों की खोज करने में सक्षम होना चाहता हूं ।
वर्तमान में, जहां तक मैं इस मुद्दे को ठीक से समझता हूं, मुझे लगता है कि यहां सबसे अच्छा विकल्प एक कस्टम SP-GiST कार्यान्वयन होगा जो बीके-ट्री को लागू करता है , लेकिन यह बहुत काम की तरह लगता है, और मैं अभी भी व्यावहारिक पर फजी हूं एक कस्टम सूचकांक को ठीक से लागू करने का विवरण। आलोचनात्मक दूरी गिना जा रहा है विनयशील पर्याप्त है, और मैं कर हालांकि पता सी,।
मूल रूप से, यहां उपयुक्त दृष्टिकोण क्या है ? मुझे हैश के एक निश्चित संपादन-दूरी के भीतर मैचों के लिए क्वेरी करने में सक्षम होने की आवश्यकता है। जैसा कि मैं इसे समझता हूं, समान लंबाई के तारों के साथ लेवेंसहाइट दूरी कार्यात्मक रूप से बाधा उत्पन्न करने वाली दूरी है, इसलिए मैं जो चाहता हूं उसके लिए कम से कम कुछ मौजूदा समर्थन है, हालांकि इससे कोई सूचकांक बनाने का कोई स्पष्ट तरीका नहीं है (याद रखें, जिस मूल्य के लिए मैं क्वेरी कर रहा हूं। परिवर्तन। मैं एक निश्चित मूल्य से दूरी की पूर्व-गणना नहीं कर सकता, क्योंकि यह केवल उस एक मूल्य के लिए उपयोगी होगा)।
वर्तमान में हैश के बाइनरी ASCII एन्कोडिंग (उदाहरण के लिए "10010101 ...") वाले हैश को 64-चार स्ट्रिंग के रूप में संग्रहीत किया जाता है, लेकिन मैं उन्हें आसानी से पर्याप्त रूप से int64 में बदल सकता हूं। असली मुद्दा यह है कि मुझे अपेक्षाकृत तेजी से क्वेरी करने में सक्षम होना चाहिए।
ऐसा लगता है कि मैं जो चाहता हूं, उसकी तर्ज पर कुछ हासिल करना संभव हो सकता है pg_trgm
, लेकिन मैं इस बात पर थोड़ा अस्पष्ट हूं कि ट्रिग्राम मिलान मेचैज्म कैसे काम करता है (विशेष रूप से, यह जो समानता मीट्रिक लौटाता है वह वास्तव में प्रतिनिधित्व करता है? यह क्या है? एडिट-डिस्टेंस की तरह)।
सम्मिलित प्रदर्शन महत्वपूर्ण नहीं है (यह प्रत्येक पंक्ति के लिए हैश की गणना करने के लिए बहुत कम्प्यूटेशनल रूप से महंगा है), इसलिए मैं मुख्य रूप से खोज के बारे में परवाह करता हूं।