2009-06-04 8 views

Répondre

6

Je présume que vous faites référence à l'analyse des requêtes booléennes à l'aide de l'objet QueryParser, est-ce correct? Le Lucene query syntax documentation devrait avoir tout ce dont vous avez besoin.

+0

Fonctionnement. Je vous remercie – Shashi

0

BooleanQuery. BooleanQuery est un conteneur de clauses booléennes, qui sont des sous-requêtes facultatives, obligatoires ou interdites. Vous pouvez normalement ajouter une clause à BooleanQuery faire usage d'une méthode API qui ressemble à:

public void add (requête de requête, nécessaire booléenne, booléen interdit)

2

Selon le document, les requêtes booléennes doivent être créés une fois par BooleanQuery.QueryBuilder et ensuite considéré comme immuable. See 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; 
    } 
}