2009-06-04 10 views

答えて

6

あなたは、QueryParserオブジェクトを使用してブール型クエリを解析することを指摘していますか? Lucene query syntax documentationには、必要なものすべてが必要です。

+0

:あるBooleanQuery.Builder.add(org.apache.lucene.search.BooleanClause)

コード例はhttp://programtalk.com/java-api-usage-examples/org.apache.lucene.util.QueryBuilder/ と一例与えられたことで見つけることができます参照してください。ありがとうございました – Shashi

0

BooleanQuery. BooleanQueryは、オプション、必須または禁止のサブクエリであるブール句のコンテナです。

公共ボイド追加(クエリ、クエリ、必要なブール、禁止ブール)

2

文書によると、ブールクエリを一度に作成する必要があります:あなたは、通常のように見えるAPIメソッドを使用することBooleanQueryに句を追加することができますBooleanQuery.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; 
    } 
}