سؤال

كيفية استخدام المنطقية مع Standardanalyzer في بحث لوسين؟

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

المحلول

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

نصائح أخرى

وفقا للوثيقة، يجب إنشاء استعلامات منطقية مرة واحدة بواسطة poleanquery.Querybuilder ثم تعتبر ثابتة. يرى booleanquery.builder.add (org.apache.lucene.search.booleancle)

مثال الرمز يمكن العثور عليه بواسطة http://programtalk.com/java-api-usage-examples/org.apache.lucene.util.querybuilder/ومن الأمثلة على ذلك هو:

public Query parse(Type type, String fieldName, Object value) throws IOException {
    final String field;
    MappedFieldType fieldType = context.fieldMapper(fieldName);
    if (fieldType != null) {
        field = fieldType.name();
    } else {
        field = fieldName;
    }
    /*
     * If the user forced an analyzer we really don't care if they are
     * searching a type that wants term queries to be used with query string
     * because the QueryBuilder will take care of it. If they haven't forced
     * an analyzer then types like NumberFieldType that want terms with
     * query string will blow up because their analyzer isn't capable of
     * passing through QueryBuilder.
     */
    boolean noForcedAnalyzer = this.analyzer == null;
    if (fieldType != null && fieldType.tokenized() == false && noForcedAnalyzer) {
        return blendTermQuery(new Term(fieldName, value.toString()), fieldType);
    }
    Analyzer analyzer = getAnalyzer(fieldType);
    assert analyzer != null;
    MatchQueryBuilder builder = new MatchQueryBuilder(analyzer, fieldType);
    builder.setEnablePositionIncrements(this.enablePositionIncrements);
    Query query = null;
    switch(type) {
        case BOOLEAN:
            if (commonTermsCutoff == null) {
                query = builder.createBooleanQuery(field, value.toString(), occur);
            } else {
                query = builder.createCommonTermsQuery(field, value.toString(), occur, occur, commonTermsCutoff, fieldType);
            }
            break;
        case PHRASE:
            query = builder.createPhraseQuery(field, value.toString(), phraseSlop);
            break;
        case PHRASE_PREFIX:
            query = builder.createPhrasePrefixQuery(field, value.toString(), phraseSlop, maxExpansions);
            break;
        default:
            throw new IllegalStateException("No type found for [" + type + "]");
    }
    if (query == null) {
        return zeroTermsQuery();
    } else {
        return query;
    }
}

BooleanQuery. BooleanQuery هي حاوية من بنود منطقية، والتي تكون اختيارية أو مطلوبة أو مسجلة محظورة. يمكنك عادة إضافة جملة ل BooleanQuery الاستفادة من طريقة API التي تبدو:

لاضافة الفراغ العامة (استعلام الاستعلام، المنطقي المطلوب، منطقية محظورة)

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