مع لوسين:لماذا أحصل على الكثير من بنود خطأ إذا كنت تفعل بادئة البحث ؟

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

  •  08-06-2019
  •  | 
  •  

سؤال

لقد كان التطبيق القيام البادئة البحث عن كل حين.مؤخرا مؤشر حجم وزيادة اتضح أن بعض البادئات جدا مرتق العديد من لوسين في التعامل معها.فإنه أبقى رمي لي الكثير من الشروط الخطأ الذي كان محبطا للغاية كما ظللت أبحث في الجرار مؤكدا أن أيا من تضمين رمز يستخدم في الواقع منطقية الاستعلام.

لماذا لا رمي شيء مثل الكثير من الزيارات استثناء ؟ و لماذا لا زيادة منطقية الاستعلام ثابت ماكس بنود صحيح في الواقع جعل هذا الخطأ الذهاب بعيدا, عندما أنا بالتأكيد فقط باستخدام بادئة query ؟ هل هناك شيء أساسي كيف الاستعلامات تشغيل أنني لست الفهم ؛ هو أنها سرا تصبح منطقية الاستفسارات?

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

المحلول

لقد ضرب هذا من قبل.أن له علاقة مع حقيقة أن لوسين, تحت الأغطية ، يتحول العديد من ( ؟ ) الأشياء في منطقية الاستفسارات عند استدعاء استعلام.كتابة()

من: http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/search/Query.html#rewrite(org.apache.lucene.index.IndexReader)

public Query rewrite(IndexReader reader)
              throws IOException

    Expert: called to re-write queries into primitive queries.
            For example, a PrefixQuery will be rewritten into a
            BooleanQuery that consists of TermQuerys.

    Throws:
        IOException

نصائح أخرى

API الصفحة مرجعية TooManyClauses يدل على أن PrefixQuery, FuzzyQuery, WildcardQuery ، RangeQuery يتم توسيع هذا الطريق (في BooleanQuery).لأنه في API المرجعية ، ينبغي أن يكون السلوك التي يمكن للمستخدمين الاعتماد عليها.لوسين لا تضع حدودا تعسفية على عدد من الزيارات (غير وثيقة الهوية يجري الباحث) لذلك "الكثير من الزيارات" استثناء قد لا يكون له معنى.ربما PrefixQuery.كتابة(IndexReader) ينبغي أن قبض على TooManyClauses ورمي "الكثير من البادئات" استثناء, ولكن الآن أنها لا تتصرف بهذه الطريقة.

بالمناسبة طريقة أخرى للبحث عن طريق البادئة هو استخدام PrefixFilter.إما تصفية الاستعلام الخاص بك مع هذا أو التفاف فلتر مع ConstantScoreQuery.

عند تشغيل بادئة الاستعلام لوسين البحث عن جميع الشروط في "القاموس" التي تطابق الاستعلام.إذا كان أكثر من 1024 (افتراضيا) مباراة ، TooManyClauses-طرح استثناء.

يمكنك الاتصال BooleanQuery.setMaxClauseCount إلى زيادة عدد ممكن من البنود المسموح بها في BooleanQuery.

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