thoward/lucene-query-parser.js

- operator not supported on field

Closed this issue · 0 comments

The following query throws an exception:

var results = lucenequeryparser.parse('title:"The Right Way" AND -text:go'); 

but this works fine:

var results = lucenequeryparser.parse('title:"The Right Way" AND text:-go');

Any chance this can get updated to support both?


I only did some super simple testing, but the following seemed to do the trick. I really don't know much about PEG so if something isn't right please let me know.

field_exp
  = op:prefix_operator_exp?fieldname:fieldname? range:range_operator_exp 
    { 
        range['field'] = 
            fieldname == '' 
                ? "<implicit>"
                : fieldname; 
        if('' != op)
        {
            range['prefix'] = op;
        }             
        return range; 
    }
  / op:prefix_operator_exp?fieldname:fieldname node:paren_exp 
    { 
        node['field']= fieldname;
        if('' != op)
        {
            node['prefix'] = op;
        } 
        return node; 
    }
  / op:prefix_operator_exp?fieldname:fieldname? term:term 
    { 
        var fieldexp = {
            'field': 
                fieldname == '' 
                    ? "<implicit>"
                    : fieldname           
            }; 
        if('' != op)
        {
            fieldexp['prefix'] = op;
        }             
        for(var key in term)
            fieldexp[key] = term[key];

        return fieldexp; 
    }

NOTE: Originally files on Bitbucket by an anonymous user on 2012-07-17.