Frage

Wie booleanQuery mit StandardAnalyzer in Lucene Suche benutzen?

War es hilfreich?

Lösung

Ich nehme an, Sie beziehen sich boolean Abfragen Parsen der QueryParser Objekt verwenden, richtig? Die Lucene Abfragesyntax Dokumentation alles haben, sollten Sie brauchen.

Andere Tipps

Nach dem Dokument sollten boolean Abfragen einmal durch BooleanQuery.QueryBuilder werden erstellt und dann unveränderlich angesehen. Siehe BooleanQuery.Builder.add (org.apache.lucene.search.BooleanClause)

Der Code kann beispielsweise durch http finden : //programtalk.com/java-api-usage-examples/org.apache.lucene.util.QueryBuilder/ und ein Beispiel gegeben ist:

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 ist ein Container von Booleschen Klauseln, die optional sind, erforderlich oder Subqueries verboten. Sie können in der Regel eine Klausel hinzufügen Verwendung einer API-Methode BooleanQuery machen, die wie folgt aussieht:

public void add (Query-Abfrage, boolean erforderlich, boolean verboten)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top