Hi Dawid,
Thanks for your email. It seems StandardQueryParser is free from
this unexpected behavior.
I used the code below with Lucene 6.2.1
(org.apache.lucene.queryparser.classic.QueryParser)
QueryParser parser = new QueryParser("test", new WhitespaceAnalyzer());
parser.setDefaultOperator(QueryParser.Operator.AND);
Query query = parser.parse("foo AND bar OR baz ");
System.out.println(query.toString());
parser.setDefaultOperator(QueryParser.Operator.OR);
query = parser.parse("foo AND bar OR baz ");
System.out.println(query.toString());
I can also reproduce it on Elasticsearch 2.2 which uses Lucene 5.4.0
$ curl -s 'localhost:9200/test/_search?pretty' -d '{ "query": {
"query_string": { "query": "foo AND bar OR baz" , "default_operator": "and"
} } , "profile" : true}' | grep luce
"lucene" : "+_all:foo _all:bar _all:baz",
...
$ curl -s 'localhost:9200/test/_search?pretty' -d '{ "query": {
"query_string": { "query": "foo AND bar OR baz" , "default_operator": "or"
} } , "profile" : true}' | grep luce
"lucene" : "+_all:foo +_all:bar _all:baz",
...
Elasticsearch uses class called MapperQueryParser which extends
org.apache.lucene.queryparser.classic.QueryParser
--
Paweł Róg
On Wed, Nov 9, 2016 at 6:10 PM, Dawid Weiss <[email protected]> wrote:
> Which Lucene version and which query parser is this? Can you provide a
> test case/ code sample?
> I just tried with StandardQueryParser and for:
>
> sqp.setDefaultOperator(StandardQueryConfigHandler.Operator.AND);
> dump(sqp.parse("foo AND bar OR baz", "field_a"));
> sqp.setDefaultOperator(StandardQueryConfigHandler.Operator.OR);
> dump(sqp.parse("foo AND bar OR baz", "field_a"));
>
> I get the same result:
>
> BooleanQuery: +field_a:foo +field_a:bar field_a:baz
>
> Dawid
>
> On Wed, Nov 9, 2016 at 6:04 PM, Pawel Rog <[email protected]> wrote:
> > Hi Eric,
> > Thank you for your email.
> > I understand that Lucene queries are not in boolean logic. My point is
> only
> > that I would expect identical Lucene queries build from the same input
> > string. My intuition says that default operator should not matter in 2
> > examples I presented in previous email.
> >
> > --
> > Paweł Róg
> >
> > On Wed, Nov 9, 2016 at 4:32 PM, Erick Erickson <[email protected]>
> > wrote:
> >
> >> Lucene queries aren't boolean logic. You can simulate boolean logic by
> >> explicitly parenthesizing, here's an excellent blog on this:
> >>
> >> https://lucidworks.com/blog/why-not-and-or-and-not/
> >>
> >> Best,
> >> Erick
> >>
> >> On Wed, Nov 9, 2016 at 1:37 AM, Pawel Rog <[email protected]>
> wrote:
> >> > Hello ,
> >> > I have a query `foo AND bar OR baz`. When I use "AND" as a default
> >> operator
> >> > this is the resulting Lucene query:
> >> >
> >> > `+test:foo test:bar test:baz`
> >> >
> >> > When I use "OR" this is the resulting query
> >> >
> >> > `+test:foo +test:bar test:baz`
> >> >
> >> >
> >> > I expected these two return exactly the same Lucene query because I
> used
> >> > operator explicitly. I thought that the default operator is used only
> >> when
> >> > operator is not explicitly mentioned in the query. Am I missing
> something
> >> > or this is not expected behavior (bug)?
> >> >
> >> > --
> >> > Paweł Róg
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>