2009-03-12 4 views
0

에서 필드 이름을 가져 오기?
궁극적으로 필드 이름과 그 값을 다시 내 viewdata로 가져 와서 게시물의 텍스트 상자에 채울 수 있기를 바랍니다.루씬 쿼리 문자열

답변

2

lucene의 QueryParser은 해당 문자열을 두 개의 TermQuery 절이 들어있는 BooleanQuery으로 변환합니다. 용어 검색어를 얻으려면 방법을 BooleanQuery 사용해야합니다.

1

나는 비슷한 요구 사항을 겪었지만 쿼리는 일반적 일 수 있습니다. 아래의 메소드 (java에서 구현 됨)를 사용한다. 전체 코드 https://github.com/atulsm/Test_Projects/blob/master/src/TestLuceneQueryStringFields.java

private static Set<String> calculateQueryFieldsRecursively(Query query) throws ParseException{ 
    Set<String> fields = new HashSet<String>(); 

    if(query instanceof TermQuery){ 
     TermQuery tQuery = (TermQuery)query;    
     Term term = tQuery.getTerm(); 
     fields.add(term.field()); 
    } else if(query instanceof BooleanQuery){ 
     BooleanQuery bQuery = (BooleanQuery)query; 
     List<BooleanClause> clauses = bQuery.clauses(); 
     for(BooleanClause clause: clauses){ 
      Query innerQuery = clause.getQuery(); 
      Set<String> innerFields = calculateQueryFieldsRecursively(innerQuery); 
      if(innerFields == null){ 
       return null; 
      }else{ 
       fields.addAll(innerFields); 
      } 
     } 
    } else { //TODO support more lucene query types 
     return null; 
    } 
    return fields; 
}