Question

Comment utiliser booleanQuery avec StandardAnalyzer dans Lucene Rechercher?

Était-ce utile?

La solution

Je suppose que vous faites référence à l'analyse syntaxique des requêtes booléennes en utilisant l'objet QueryParser, correct? Lucene documentation de syntaxe de requête devrait avoir tout ce dont vous avez besoin.

Autres conseils

Selon le document, les requêtes booléennes devrait être créé une fois par BooleanQuery.QueryBuilder et considéré comme immuable. Voir BooleanQuery.Builder.add (org.apache.lucene.search.BooleanClause)

L'exemple de code peut être trouvé par http : //programtalk.com/java-api-usage-examples/org.apache.lucene.util.QueryBuilder/ et un exemple donné est:

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 est un conteneur de clauses booléennes, qui sont facultatifs, des sous-requêtes requis ou interdit. Vous pouvez normalement ajouter une clause à BooleanQuery faire usage d'une méthode API qui ressemble à:

public void add (requête de requête, requise booléenne, interdite Boolean)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top