Получить имена полей из строки запроса Lucene - PullRequest
0 голосов
/ 12 марта 2009

Если у меня есть строка запроса Lucene

"field1:value1 myField:aValue"

Есть ли способ, позволяющий Lucene разобрать это, чтобы я мог получать термины?
В конечном итоге я хочу иметь возможность вернуть имена полей и их значения обратно в мои viewdata, чтобы я мог заполнить их в своих текстовых полях при обратной записи.

Ответы [ 2 ]

2 голосов
/ 14 марта 2009

Lucene's QueryParser преобразует эту строку в BooleanQuery, содержащую два предложения TermQuery. Вам нужно будет использовать getClauses метод BooleanQuery, чтобы получить запрос термина.

1 голос
/ 13 декабря 2016

Я столкнулся с аналогичным требованием, но запрос может быть общим. Придумал метод ниже (реализовано в 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...