اجعل لوسين يتعامل مع جميع المصطلحات الموجودة في الحقل كمصطلح واحد

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

مثال:

  • علامتي التجارية
    • لي
    • ماركة
  • مزرعة براهمين
    • براهمين
    • مزرعة

سيؤدي الاستعلام المنتظم عن "حمالة الصدر" إلى إرجاع كلا الوثيقتين لأن كلاهما يحتوي على مصطلح يبدأ بـ حمالة الصدر.
ومع ذلك، فإن النتيجة التي أريدها ستعيد فقط الإدخال الأخير لأن الفصل الأول يبدأ بحمالة الصدر.

أي اقتراحات؟

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

المحلول

إستخدم SpanQuery للبحث فقط في موضع الفصل الأول.PrefixQuery ملفوف بواسطة SpanMultiTermQueryWrapper ملفوف بواسطة SpanPositionRangeQuery:

<SpanPositionRangeQuery: spanPosRange(SpanMultiTermQueryWrapper(company:bra*), 0, 1)>

نصائح أخرى

قم بإنشاء حقل مفهرس آخر، حيث يوجد اسم الشركة لا رمزي.عند الضرورة، ابحث في هذا الحقل بدلاً من حقل اسم الشركة المميز.


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

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

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