يبدو أن لوسين يقوم بتخزين نتائج البحث مؤقتًا - لماذا؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

في مشروعي نستخدم Lucene 2.4.1 للبحث عن النص الكامل.هذا مشروع J2EE، ويتم إنشاء IndexSearcher مرة واحدة.في الخلفية، يتم تحديث الفهرس كل دقيقتين (عندما يتغير المحتوى).ويمكن للمستخدمين البحث في الفهرس من خلال آلية البحث الموجودة في الصفحة.

المشكلة هي أن النتائج التي أرجعها Lucene يبدو أنها تم تخزينها مؤقتًا بطريقة ما.

هذا هو السيناريو الذي لاحظته:

  • أبدأ التطبيق وأبحث عن "الكلمة الرئيسية" - يتم إرجاع 6 نتائج،
  • يتم تحديث الفهرس باستخدام لوقا أرى أن هناك 8 نتائج الآن للاستعلام عن "الكلمة الرئيسية"،
  • قمت بالبحث مرة أخرى باستخدام التطبيق، ومرة ​​أخرى تم إرجاع 6 نتائج.

لقد قمت بتحليل التكوين الخاص بنا ولم أجد أي تخزين مؤقت في أي مكان.لقد قمت بتصحيح أخطاء البحث، ولا يوجد تخزين مؤقت للكود الخارجي، searcher.search إرجاع 6 نتائج.

هل نتائج ذاكرة التخزين المؤقت Lucene داخليًا بطريقة ما؟ما الخصائص الخهل يجب أن أتحقق؟

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

المحلول

لرؤية التغييرات التي أجراها IndexWriters مقابل فهرس لديك قارئ IndexReader مفتوح له، تأكد من الاتصال قارئ الفهرس.reopen() لرؤية آخر التغييرات.

تأكد أيضًا من أن كاتب الفهرس يلتزم بالتغييرات، إما من خلال الالتزام الصريح () أو الإغلاق () أو ضبط الالتزام التلقائي على "صحيح".

نصائح أخرى

مع الإصدارات السابقة للإصدار 2.9.0، قام Lucene تلقائيًا بتخزين نتائج الاستعلامات مؤقتًا.مع الإصدارات الأحدث، لا يوجد تخزين مؤقت إلا إذا قمت بلف الاستعلام الخاص بك في QueryFilter ثم قمت بلف النتيجة في CachingWrapperFilter.يمكنك التفكير في التبديل إلى إصدار >= 2.9.0 إذا أصبحت إعادة فتح الفهرس مشكلة

ملاحظة أخرى:لكي يتمكن IndexReader من العثور على المستندات المحدثة لسلاسل الرسائل الأخرى في الوقت الفعلي، عند تهيئة IndexReader، يجب أن تكون المعلمة "للقراءة فقط" خاطئة.وإلا فلن تعمل طريقة إعادة الفتح ().

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