250k से कम संभावित रिकॉर्ड को संभालने के लिए हल्के दस्तावेज़ अनुक्रमण


10

हाल ही में मैंने स्वयं को दस्तावेज़ अनुक्रमण इंजनों की सीमाओं का पीछा करते हुए पाया है। मैं एक छोटी सी वेबसाइट विकसित कर रहा था जिसे कुछ काफी मजबूत खोज क्षमताओं की आवश्यकता थी, लेकिन उनकी हार्डवेयर बाधाओं के कारण मैं इस आवश्यकता को संभालने के लिए एक ल्यूसीन-ईश समाधान (जैसे कि सोलर या इलास्टिकसर्च, जैसे कि मैं सामान्य रूप से) को तैनात नहीं कर सका।

और फिर भी, जबकि मुझे कुछ जटिल डेटा और गणना की आवश्यकता थी जो डेटाबेस-गहन थे, मुझे 250 से अधिक संभावित रिकॉर्ड को संभालने की आवश्यकता नहीं थी। संपूर्ण सोलर या ES उदाहरण को संभालने के लिए केवल एक बेकार की तरह तैनात करना।

जब मैंने इसके बारे में सोचा, तब यह एक बड़ी समस्या की तरह प्रतीत होता है। अधिकांश लोग SQL के साथ पूरी तरह से खोज आवश्यकताओं को संभालते हैं। वे अपने डेटा के लिए सिर्फ SQL क्वेरी चलाते हैं और वह है। उनकी खोज क्षमताएं भी भयानक होती जा रही हैं।

  • एक कंबल पूर्ण-पाठ वाइल्डकार्ड खोज करना कुछ सिस्टम (विशेष रूप से होस्ट को साझा करना) पर दर्दनाक रूप से धीमा हो सकता है और अपने डेटाबेस को नीचे कर सकता है, खासकर यदि आपके पास जटिल प्रश्न और बहुत सारे जोड़ हैं।

  • आप उपयोगकर्ता से एक ही अनुरोध पर कई प्रश्न कर रहे हैं। आप इसे कभी-कभी अधिक जटिल प्रश्नों के साथ प्राप्त कर सकते हैं, लेकिन पिछले बिंदु को देखें।

  • आमतौर पर पूर्ण-पाठ इंजन में मौजूद सुविधाओं का अभाव।

डेटाबेस में सर्वर के रूप में तैनात किए जाने की आवश्यकता की एक ही समस्या थी और फिर SQLite साथ आया और अचानक हम एक डेटाबेस को तैनात कर सकते थे जो एक ही फाइल में स्व-निहित है। मेरे Googling ने कुछ भी नहीं बनाया है - आश्चर्य है कि अगर पूर्ण-पाठ अनुक्रमण / खोज के लिए कुछ ऐसा मौजूद है।

क्या कारकों को ध्यान में रखना है, जब यह तय करना है कि हल्के दस्तावेज़ अनुक्रमण को लागू करना है (जैसे कि किसी अन्य प्रश्न के उत्तर में बताया गया है ) या इन स्थितियों के लिए एसक्यूएल का उपयोग करते रहें?


5
कृपया अपना बाज़ार अनुसंधान यहाँ न करें। यहां प्रश्न ऑफ टॉपिक है। आपके पास ऑनस्टार्टअप पर यह पूछने के लिए बेहतर भाग्य हो सकता है , हालांकि आपको पहले उनके FAQ को पढ़ना चाहिए।
ऊद

9
वाह - मैं यहाँ एक कंपनी या कुछ भी शुरू नहीं कर रहा हूँ। यह सिर्फ एक ईमानदार सवाल है जो किसी स्थिति या वर्तमान बॉक्स के बाहर एक अलग समाधान में तकनीक का उपयोग करने की तलाश में है।
जारोद नेट्टल्स

16
यह सॉफ्टवेयर विकास में वैचारिक समस्याओं के बारे में एक साइट है। कृपया सॉफ्टवेयर विकास में आपके द्वारा की जा रही वैचारिक समस्याओं के बारे में न पूछें।
psr

3
वहाँ एक अच्छा सवाल है ... मुझे लगता है कि इसे और अधिक स्पष्ट और विशिष्ट बनाने के लिए बस साफ करने की आवश्यकता है।
ग्रैंडमास्टरबी

3
यदि आपकी SQLite के बारे में एकमात्र शिकायत पाठ अनुक्रमण की कमी है, तो सिर्फ SQLite के FTS4 एक्सटेंशन मॉड्यूल का उपयोग क्यों न करें ?
ब्रायन

जवाबों:


2

तुम्हें पता है, मुझे लगता है कि रेडिस का उपयोग करने पर विचार करना है।

  • संदर्भ के विचार का उपयोग करें । दस्तावेजों के बारे में अधिक जानकारी के बिना गहराई से जाना मुश्किल होगा। अक्सर आप दस्तावेजों की हेडिंग से कई चीजों को समझ सकते हैं। प्रत्येक दस्तावेज़ को प्रोफाइल करना वेब क्रॉलिंग की तरह ही मूल पहला कदम है।

  • खोजशब्दों के शब्दकोश में शब्दों के प्रत्येक दस्तावेज़ पर एक गिनती करें। कुल परियोजना के लिए प्रत्येक शब्द की लोकप्रियता की गिनती का ध्यान रखें। यदि आप किसी दस्तावेज़ या सेट में उच्च प्रासंगिकता का पता लगाने में सक्षम होना चाहते हैं, तो इस गणना के लिए पुनरावृत्त में अधिक वजन जोड़ें।

    पहली बात यह है कि आप अपने पूरे सेट में शब्दों की एक सर्व-समावेशी सूची दें। उस सूची में कुछ भी नहीं मिला, 'कोई परिणाम नहीं' की स्वचालित वापसी। मेरा सुझाव है कि लोकप्रियता के निचले 5-20% से अधिक रैंकिंग (जब सूचकांक पर खोज क्वेरी चल रही हो) भी बस कोई परिणाम नहीं कहेंगे '।

  • यदि आप करते हैं redis की तरह कुछ के साथ जाना है, या यहाँ तक कि बस अपनी स्वयं की स्मृति संरचना आप वर्णनकर्ता फाइल या मिनी db फ़ाइल और पेज वस्तुओं है कि स्मृति के लिए प्रत्येक विशिष्ट दस्तावेज़ आगे और पीछे का वर्णन के साथ दस्तावेजों जोड़ी कर सकते हैं। स्मृति में आम खोजों को रखें शायद उन्हें स्लॉट्स के लिए प्रतिस्पर्धा करने या प्रत्येक खोज पर बढ़ने के लिए उन्हें रहने का समय दे।

  • आगे जाने के लिए, संदर्भ डेटा सहेजना शुरू करें जो एक लिंक / रेफ / पॉइंटर / इंडेक्स / जो भी दो या दो से अधिक दस्तावेजों और कीवर्ड या वाक्यांशों का एक पूल बनाता है। मूल रूप से आप एक पंप अप टैग बादल मिलता है।

  • इसके अलावा, जब आपके शब्दकोश में किसी शब्द का अनुसरण किया जाता है या सटीक रूप से समान मेटाडेटा / शीर्षक के दस्तावेजों में पूर्ववर्ती स्ट्रिंग द्वारा वाक्यांश का पता लगाते हैं। यह गहन है लेकिन डेटा रेंडर करने के लिए केवल एक पास की आवश्यकता होती है।

  • आप अपने डेटा को अलग कर सकते हैं और वास्तविक उपयोग में एक दूसरे से संबंधित समूहों को बेहतर बना सकते हैं।

  • उपयोगकर्ता द्वारा हर बार ट्रैक करने पर शुद्धता की संभावना को कनेक्ट करें जो कि शीर्ष तीन नहीं है। सही परिणाम देने वाले उपयोगकर्ता खोजों को देखकर वाक्यांश का पता लगाने में सुधार करें। ग्राहकों की खोजों के सापेक्ष बनने के लिए अपने प्रश्नों को बल दें।

  • क्या आपको दस्तावेज़ अपडेट के लिए देखना है? क्रोनोग्रफ़ / शेल स्क्रिप्ट या शेड्यूल किए गए कार्य / बैच स्क्रिप्ट मदद कर सकते हैं। हालांकि शेड्यूलिंग और स्क्रिप्टिंग के लिए स्पष्ट रूप से विभिन्न विकल्प हैं।

  • व्यर्थ डिस्क, गति प्राप्त करें, जटिलता खो दें। अपने दस्तावेजों के कई पेड़ों और / या दस्तावेजों के लिंक के पेड़ों को बचाएं। केवल उन पेड़ों की खोज करें जिनके लिए मानदंड पूरे किए गए हैं, या कम से कम उन्हें ज्यादातर मामलों में परिणाम जल्दी प्राप्त करने के लिए पसंद करते हैं।

  • अपने स्वयं के हल्के क्रमपरिवर्तन इंजन बनाएं या एक ऐसा खोजें जो त्वरित वर्ण पहचान और रेगेक्स का उपयोग करता है। या बस कुछ घंटों में रेगेक्स का उपयोग करके एक बना लें, लेकिन पर्याप्त खोज के लिए प्रदर्शन अंतर यहां ध्यान देने योग्य होगा।

  • इतनी सारी चीजें।

ये मजबूत दस्तावेज़ अनुक्रमण और खोज को लागू करने के लिए संभावित समाधान के रूप में हैं। यह सब समावेशी नहीं है। और उस ओल्ड में शायद एक अतिरिक्त बॉक्स को हथियाने के लिए बेहतर है, उस पर एक तंत्रिका जाल फेंकें और उस तंत्रिका जाल को एक अच्छा वेब इंटरफ़ेस बनाने में कुछ दिन बिताएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.