从lucene查询字符串中获取字段名称

时间:2009-03-12 15:21:59

标签: c# .net asp.net-mvc lucene

如果我有一个Lucene查询字符串

"field1:value1 myField:aValue"

有没有办法让Lucene解析这个,以便我可以得到术语查询? 我最终希望能够将字段名称及其值返回到我的viewdata,以便我可以在帖子后面的文本框中填写它们。

2 个答案:

答案 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;
}