2009-08-12 5 views

Antwort

1

Traverse über Baum von BooleanQuery und Entfernen von Einträgen im Zusammenhang Begriffs („Hilfe“)

+0

alle Websites/Vorschläge, wo Sie dies tun können? –

1

Dies ist ein Baseballstadion von dem, was Ihr Code soll wie folgt aussehen:

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(); 
      } 

     } 
    } 
} 

Was das bedeutet ist entfernt TermQuery s mit das nicht standardmäßige Feld von und rekursiv in sub-boolesche Abfragen.

Beachten Sie, dass dieser Code nicht vollständig ist. Abhängig von Ihrer Situation gibt es möglicherweise mehr Arten von Abfragen, über die Sie sich Gedanken machen sollten, z. B. Suchanfragen und Abfragen mit konstantem Trefferbereich.

Bevor Sie diese Funktion aufrufen, stellen Sie sicher, dass Sie query.rewrite() tun, um beliebige Platzhalterabfragen in boolesche Abfragen zu konvertieren.

Verwandte Themen