जब आप शुरुआत के बजाय एक स्ट्रिंग के बीच की खोज करते हैं तो इसे क्या कहा जाता है?


19

मैं अपने साथी डेवलपर्स के साथ बेहतर संवाद करने के लिए अपनी शब्दावली को चमकाने की कोशिश कर रहा हूं। हमारे पास साइट में कई जगह हैं जहां हम बहस कर रहे हैं अगर हमें शुरुआत में स्ट्रिंग से 'running%'कहीं भी स्ट्रिंग के लिए खोज करनी चाहिए '%running%

मैं मध्य खोज को "फजी" कह रहा हूं, जो मुझे एहसास है कि गलत है क्योंकि फजी का अर्थ है "रन", "रनिंग" [sic], "run" [sic] शब्द का रूप बदलना।

एक स्ट्रिंग की शुरुआत और एक स्ट्रिंग के बीच की खोज के लिए सही शब्दावली क्या है?


1
मैंने उन स्थानों पर काम किया है जो उन दो विकल्पों के बीच अंतर करने के लिए "बनाम" युक्तियों के साथ "शुरू होता है।
सोलोमन रटज़की

जवाबों:


24

इसे "अन-एंकरेड सर्च पैटर्न" कहा जाता है , और यह एसक्यूएल में ऐसा दिखता है।

foo LIKE '%bar%'

यदि आपके पास %दोनों तरफ कमी है , तो यह कहा जाता है कि खोज पैटर्न क्रमशः स्ट्रिंग के शुरू या अंत में लंगर डालते हैं। यह लिंगो रेगेक्स दुनिया से आता है।

foo LIKE 'bar%'

आप कहेंगे, "खोज पैटर्न bar%ने स्ट्रिंग की शुरुआत के लिए लंगर डाला "।

तुलना के लिए, एक पीसीआर के साथ ^या $टोकन के साथ लंगर डाला जाता है और ऐसा दिखता है ^barया bar$। पीसीआर को टोकन के साथ स्पष्ट एंकरिंग की आवश्यकता होती है, जबकि एसक्यूएल LIKEस्टेटमेंट को स्पष्ट रूप से एंकर किया जाता है और "अन-एंकरेड सर्च पैटर्न"% बनाने के लिए स्पष्ट आवश्यकता होती है ।

एक साइड नोट के रूप में, आप पोस्टग्रेएसक्यूएल में कुछ का उपयोग करके ट्रिगर्स के साथ इस प्रकार के भावों को अनुक्रमित कर सकते हैंpg_trgm


1

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

एक टेलीफोन बुक में देखने पर विचार करें (यदि आप उन लोगों को याद करने के लिए पर्याप्त पुराने हैं ...)। आप उन लोगों को आसानी से ढूंढ सकते हैं, जिनके अंतिम नाम "Dan:" से शुरू होते हैं, आप Ds पर अंगूठे लगाते हैं, DAs पर फ़्लिप करते हैं, और DAN-somethings सभी एक साथ होंगे। यदि आप ऐसे लोगों को ढूंढना चाहते हैं जिनके अंतिम नामों में स्ट्रिंग "ANIEL" शामिल है, तो आपको हर पृष्ठ (तालिका को स्कैन करना) पढ़ना होगा।


2
"RDBMS को पूरे सूचकांक को स्कैन करना होगा" जो इतना सच नहीं है। postgresql.org/docs/9.6/static/pgtrgm.html
इवान कैरोल

मुझे लगता है कि यह देखने के लिए बहुत ही सामान्य शब्द हो सकता है, क्योंकि इसमें कई अन्य मामलों को शामिल किया गया है (उदाहरण के लिए, स्तंभ पर किए गए फ़ंक्शन के परिणाम को खोजना)।
डेविड स्पिललेट

0

यह वास्तव में आपका सवाल नहीं है, लेकिन आपकी फजीहत का उदाहरण अभेद्य है।

  • फजी तेज, बाइनरी के विपरीत है , जिसका अर्थ है कि आप मैच का प्रतिशत हो सकते हैं, उदाहरण के लिए 'run'सटीक पर एक फजी खोज ।5 में 'भागा', 'रूड', और बहुत सारे शब्द शामिल होंगे। SQL फ़ज़ी सर्च का समर्थन नहीं करता है , आपको ल्यूसीन जैसे अतिरिक्त सिस्टम की आवश्यकता है।
  • एक वाइल्डकार्ड इच्छा खोज के लिए 'run%'हमेशा 'runing' और 'runed' शामिल होंगे, और आप अलग कर सकते हैं के साथ शुरू होता है और होता है ( '%run%'के रूप में शामिल करने के लिए @ 'outrunning') सुलैमान Rutzky पता चलता है
  • हालाँकि, यदि आप पूरे शब्दों को खोजना चाहते हैं , उदाहरण के लिए, टेक्स्ट ब्लॉक में, आपको पूर्ववर्ती या अनुगामी व्हाट्सएप ' run '(या ' run% 'आंशिक मिलान जैसे 'ब्ला ब्ला रनिंग ब्ला' और 'ब्लो रन ब्ला ब्ला') को इंगित करना होगा ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.