تقييم الاستعلام المتداخل لوكين فيما يتعلق بالنفي
-
20-09-2019 - |
سؤال
أنا أضيف أباتشي لوسين دعم ل QueryDSL (الذي يوفر استفسارات آمنة من نوع Java) ، وأواجه مشاكل في فهم كيفية قيام Lucene بتقييم الاستعلامات خاصة فيما يتعلق بالنفي في الاستفسارات المتداخلة.
على سبيل المثال ، فإن الاستعلامات التاليةان في رأيي هما من الناحية الدلالية ، ولكن فقط الأول يعيد نتائج.
+year:1990 -title:"Jurassic Park"
+year:1990 +(-title:"Jurassic Park")
يظهر أدناه شجرة الكائن المبسطة في المثال الثاني.
query : Query
clauses : ArrayList
[0] : BooleanClause
"MUST" occur : BooleanClause.Occur
"year:1990" query : TermQuery
[1] : BooleanClause
"MUST" occur : BooleanClause.Occur
query : BooleanQuery
clauses : ArrayList
[0] : BooleanClause
"MUST_NOT" occur : BooleanClause.Occur
"title:"Jurassic Park"" query : TermQuery
لوكين QueryParser
يبدو أن تقييم "AND (NOT"
في نفس النوع من أشجار الكائن.
هل هذا خطأ في لوسين أم أساءت فهم تقييم استعلام لوكين؟ يسعدني تقديم المزيد من المعلومات إذا لزم الأمر.
المحلول
هم ليسوا نفس الشيء.
في
+year:1990 +(-title:"Jurassic Park")
لديك مسافة فرعية لا تحتوي إلا على جملة واحدة. ما يحدث هو أن لورين تقوم بتقييم
-title:"Jurassic Park"
بند وهو يعيد 0 مستندات. ثم تشير إلى أن الاستماع الفرعي يجب أن يحدث ، ولأنه يعود مستندات صفر ، فإنه ينفي بقية الاستعلام.