Obțineți nume de câmpuri dintr-un șir de interogare Lucene

voturi
0

Dacă am un șir de interogare Lucene

field1:value1 myField:aValue

Există o modalitate de a lasa Lucene analiza acest lucru , astfel că pot obține interogări pe termen?
În cele din urmă vreau să fie capabil de a obține numele de câmpuri și valorile lor înapoi la videotex meu , așa că le pot completa textboxes mele pe mesaj.

Întrebat 12/03/2009 la 14:21
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
2

Lucene lui QueryParserva converti acel șir într - un BooleanQueryconținând două TermQueryclauze. Va trebui să utilizați getClausesmetoda de BooleanQuerya obține interogări pe termen.

Publicat 14/03/2009 la 12:23
sursa de către utilizator

voturi
1

Am confruntat cu cerințe similare, dar interogarea poate fi generic. A venit cu metoda de mai jos (implementat în Java). Codul complet 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;
}
Publicat 13/12/2016 la 06:48
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more