مؤشر لوسين وسؤال تصميم الاستعلام - البحث عن الأشخاص

StackOverflow https://stackoverflow.com/questions/1614609

  •  06-07-2019
  •  | 
  •  

سؤال

لقد بدأت للتو العمل مع Lucene (على وجه التحديد، Lucene.Net) ونجحت في إنشاء العديد من المؤشرات وليس لدي أي مشكلة مع أي منها.بعد أن عملت سابقًا مع Endeca، وجدت أن Lucene خفيف الوزن وقوي ولديه منحنى تعليمي أقل بكثير (يرجع ذلك في الغالب إلى واجهة برمجة التطبيقات المختصرة).

ومع ذلك، لدي موقف فهرس/استعلام محدد أواجه فيه مشكلات في الالتفاف حول رأسي.ما لدي هو دليل الشخص.يمكن البحث عن الأشخاص في هذا التطبيق، بهدف إرجاع المطابقات الدقيقة والتقريبية.حاليًا، في الفهرس أقوم بربط "الاسم الأول" و"اسم العائلة" في حقل واحد يسمى "الاسم الكامل"، مع إضافة مسافة بين الاثنين.إذن الاسم الأول: جون مع الاسم الأخير: سميث ينتج الاسم الكامل: جون سميث.أتوقع إمكانية وجود أسماء وسطى وربما لاحقة، لكن هذا ليس مهمًا في الوقت الحالي.

أرغب في إجراء ما يعادل بحثًا غامضًا عن الاسم، بحيث يتمكن أي شخص يبحث عن "John Smith" من الحصول على "Jon Smith".كنت قد فكرت في إجراء بحث متعدد، ولكن هذا يصبح أكثر تعقيدًا إذا كان اسمه في الواقع "جون ديل كارمن" أو "جون بول ديل كارمن".ليس لدي أي شيء فيما يكتبه المستخدم لتحديد أجزاء الاسم الأول أو اسم العائلة.

الفكرة الوحيدة التي تراودني هي أنه يمكنني استبدال المسافات في القيمة المتسلسلة بحرف لا يمكن التخلص منه.إذا قمت بذلك عندما قمت بإنشاء مستند للفهرس وأيضًا عندما قمت بتحليل الاستعلام، فيمكنني التعامل معه ككلمة واحدة أكبر، أليس كذلك؟هل هناك طريقة أخرى للقيام بذلك تناسب الأسماء البسيطة ("جون سميث") وأيضًا الأسماء الأكثر تعقيدًا ("جون بول ديل كارمن")؟

سيكون موضع تقدير حقا أي نصيحة.شكرا لك مقدما!

يحرر:يتبع تفاصيل إضافية.

في لوقا، طرحت الاستعلام التالي:

FullName:jonn smith~

يتم تحليلها على النحو التالي:

FullName:jonn CreatedOn:smith~0.5

مع توضيح:

BooleanQuery:boost=1.0000
    clauses=2, maxClauses=1024
    Clause 0: SHOULD
        TermQuery:boost=1.0000
            Term: field='FullName' text='jonn'
    Cluase 1: SHOULD
        FuzzyQuery: boost=1.0000
            prefixLen=0, minSimilarity=0.5000
            org.apache.lucene.search.FuzzyTermEnum: diff=-1.0000
            FilteredTermEnum: Exception null

"CreatedOn" هو حقل آخر في الفهرس.لقد حاولت وضع علامات الاقتباس حول المصطلح "جون سميث"، ولكنه يتعامل معه بعد ذلك باعتباره عبارة عن عبارة، بدلاً من ذلك.أنا متأكد من أن المشكلة تكمن في أنني لا أفعل شيئًا صحيحًا، ولكن كوني صديقًا للبيئة في كل هذا، فأنا لست متأكدًا من حقيقة هذا الشيء.

هل كانت مفيدة؟

المحلول

كانت مشكلتي في كيفية بناء الفهرس.ما انتهى بي الأمر إلى فعله هو التأكد من أنه لم يتم ترميز الاسم الكامل، وبدأ الاستعلام في إرجاع النتائج الصحيحة.كانت نتائج الشرح المذكورة أعلاه بسبب خطأ ID10T من جهتي وتعود الآن بشكل صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top