2009-06-04 4 views

답변

6

나는 당신이 QueryParser 객체를 사용하여 부울 쿼리를 구문 분석하는 것을 말하는 것으로 생각하십니까? Lucene query syntax documentation에는 필요한 모든 것이 있어야합니다.

+0

그것은 작동합니다. 고맙습니다 – Shashi

0

BooleanQuery. BooleanQuery은 선택적, 필수 또는 금지 된 하위 쿼리 인 Boolean 절의 컨테이너입니다.

공공 무효 추가 기능 (쿼리 쿼리, 필요한 부울 금지 부울)

2

문서에 따르면, 부울 쿼리를 한 번 작성해야합니다 : 당신은 일반적으로처럼 보이는 API 방법을 활용 BooleanQuery에 절을 추가 할 수 있습니다 BooleanQuery.QueryBuilder가 작성한 다음 불변으로 간주됩니다. BooleanQuery.Builder.add(org.apache.lucene.search.BooleanClause)

코드 예제가 주어 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; 
    } 
}