2009-08-12 1 views

答えて

1

BooleanQueryの木の上にトラバースと関連のエントリターム(「ヘルプ」)

+0

これを行う場所はどこですか? –

1

を削除。これは、あなたのコードはどのように見えるかの球場である:これは何

public static void removeNonDefault(BooleanQuery query, String defaultField) { 
    List<BooleanClause> clauses = (List<BooleanClause>)query.clauses(); 
    Iterator<BooleanClause> iter = clauses.iterator(); 
    while(iter.hasNext()) { 
     BooleanClause clause = iter.next(); 
     Query subQuery = clause.getQuery(); 

     if(subQuery instanceof BooleanQuery) { 
      removeNonDefault((BooleanQuery)subQuery, defaultField); 

     } else if(subQuery instanceof TermQuery) { 
      if (!((TermQuery) subQuery).getTerm().field().equals(defaultField)) { 
       iter.remove(); 
      } 

     } 
    } 
} 

さはとTermQuery秒を削除しますBooleanQueryからのデフォルト以外のフィールドを返し、サブブール値のクエリに再帰的にダウンします。

このコードは完全ではありません。状況に応じて、フレーズクエリや一定のスコア範囲のクエリなど、心配すべき種類のクエリがさらに存在する可能性があります。

この関数を呼び出す前に必ずquery.rewrite()を実行して、任意のワイルドカードクエリをブール型クエリに変換してください。

関連する問題