حذف الفهرس من SOLR باستخدام SOLRJ كعميل
سؤال
أنا أستخدم SOLRJ كعميل لفهرسة المستندات على خادم SOLR.
أواجه مشكلة أثناء حذف الفهارس من خلال "ID" من SOLR Server. أنا أستخدم التعليمات البرمجية التالية لحذف الفهارس:
server.deleteById("id:20");
server.commit(true,true);
بعد ذلك عندما أبحث مرة أخرى عن المستندات ، تحتوي نتيجة البحث على المستند أعلاه أيضًا. لا أعرف ما الذي يحدث في هذا الرمز. الرجاء مساعدتي في القضية.
شكرًا!
المحلول
عند الاتصال بـ DeleteById ، ما عليك سوى استخدام المعرف ، دون بناء جملة الاستعلام:
server.deleteById("20");
server.commit();
نصائح أخرى
بعد حذف المستند ، ارتكب الخادم وأضف الأسطر التالية. بعد خط التزام الخادم.
UpdateRequest req = new UpdateRequest();
req.setAction( UpdateRequest.ACTION.COMMIT, false, false );
req.add( docs );
UpdateResponse rsp = req.process( server );
استخدم الطريقة DeleteByquery () لحذف المستندات التي تطابق الاستعلام:
server.deleteByQuery("id:20");
server.commit();
لذلك لن يعمل DeleteById إلا إذا كنت تقوم بتكوين مفتاحك باستخدام سمة واحدة فقط. لذلك ، كان لدي حالة حيث كان المعرف مزيجًا من سمات متعددة مثل موظف+قسم. ولكن ، كان لدى طاولتي الموظف والكمال كأعمدة منفصلة وكذلك مع الفهارس التي تم إنشاؤها عليها. لذلك عندما أردت حذف سجل ، كان لدي فقط الموظف وليس قسمًا. لقد استخدمت الأمر Curl لحذف حيث يمكنك تحديد العمود وقيمته وسيحذف السجل بأكمله.
على سبيل المثال حليقة http: // localhost: 8983/solr/update --بيانات ':نوع المحتوى '-H': text/xml ؛ charset = utf-8 '