如果我有一个Lucene查询字符串
"field1:value1 myField:aValue"
有没有办法让Lucene解析这个,以便我可以得到术语查询? 我最终希望能够将字段名称及其值返回到我的viewdata,以便我可以在帖子后面的文本框中填写它们。
答案 0 :(得分:2)
lucene的QueryParser
会将该字符串转换为包含两个BooleanQuery
子句的TermQuery
。您需要使用BooleanQuery
{{1}}方法来获取术语查询。
答案 1 :(得分: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;
}