2012-07-01 17 views
5

मान लें कि मेरे डेटास्टोर में व्यक्तियों की सूची है। प्रत्येक व्यक्ति को वहाँ निम्नलिखित क्षेत्रों पड़ सकता है:व्यक्ति की खोज व्यवस्थित तरीके से व्यवस्थित करने के लिए कैसे करें?

  • अंतिम नाम (*)
  • पहला नाम
  • मध्य नाम
  • आईडी (*)
  • ड्राइविंग लाइसेंस आईडी (*)
  • एक और आईडी (*)
  • जन्म तिथि
  • क्षेत्र
  • जन्म

कम से कम एक क्षेत्रों में से की जगह के साथ (*) मौजूद होना चाहिए चिह्नित।

अब उपयोगकर्ता मुझे फ़ील्ड की एक ही सूची (और फिर कम से कम एक (*) के साथ चिह्नित फ़ील्ड प्रदान किया जाना चाहिए) प्रदान करता है। मुझे प्रदान किए गए व्यक्ति के लिए खोज करनी चाहिए। लेकिन सभी क्षेत्रों का मिलान नहीं किया जाना चाहिए। मुझे किसी भी तरह से उपयोगकर्ता को प्रदर्शित करना चाहिए कि मैं खोज के परिणामों में कैसे यकीन करता हूं। कुछ की तरह:

  • अगर व्यक्ति id और last name (और उपयोगकर्ता की खोज पर सिर्फ इन 2 क्षेत्रों प्रदान की गई) के अनुरूप है, तो मुझे यकीन है कि परिणाम सही (100%) है हूँ,
  • यदि व्यक्ति id और last name से मेल खाता है (और उपयोगकर्ता ने अन्य फ़ील्ड प्रदान किए हैं, जो डेटाबेस में पाए गए थे, लेकिन मिलान नहीं किए गए थे), तो मुझे यकीन है कि परिणाम 60% तक लगभग सही है;
  • आदि

(संख्या सिर्फ उदाहरण के रूप में प्रदान की जाती हैं)

मैं ऐसे खोज कैसे व्यवस्थित कर सकते हैं? क्या कोई मानक एल्गोरिदम है? मैं डेटाबेस में अनुरोधों की संख्या को कम करना चाहता हूं।

पीएस मैं उपयोगकर्ता को डेटाबेस से वास्तविक फ़ील्ड मान प्रदान नहीं कर सकता।

उत्तर

1

ऐसा लगता है कि एक मैच की गुणवत्ता निर्धारित करने के लिए आपके तर्क की तरह डेटाबेस परत पर संभालना बहुत जटिल होगा। मुझे लगता है कि आप उन सभी रिकॉर्ड्स को पुनर्प्राप्त करके सर्वश्रेष्ठ प्रदर्शन प्राप्त करेंगे जो कम से कम एक अनिवार्य कुंजी से मेल खाते हैं, उनमें से प्रत्येक के लिए मिलान स्कोर की गणना करते हैं, और सर्वश्रेष्ठ स्कोर लौटाते हैं। उदाहरण के लिए, यदि उपयोगकर्ता एक आईडी, अंतिम नाम और जन्म स्थान प्रदान करता है, आपकी क्वेरी कुछ ऐसा दिखाई देगा:

SELECT * FROM users WHERE id = `the_id` OR last_name = `the_last_name`; 

अगर आप आम के बहुत सारे के साथ एक बहुत बड़ी डाटासेट है यह एक प्रदर्शन समस्या हो सकती है अंतिम नाम लेकिन अन्यथा मैं उम्मीद करता हूं कि बहुत से टकराव न देखें। आप इसे GAE के बाहर अपने डेटासेट पर देख सकते हैं। यदि सभी अनिवार्य फ़ील्ड OR को AND पर बदलकर मेल खाते हैं तो आप बेहतर प्रदर्शन भी प्राप्त कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे