ebuildy
(Thomas Decaux)
October 18, 2016, 10:14am
1
Query string seems not respecting AND priority against OR.
In a very simple index with 3 documents:
{
_id: "2",
_score: 1,
_source: {
name: "vincent",
age: 20
}
},
{
_id: "1",
_score: 1,
_source: {
name: "tom",
age: 25
}
},
{
_id: "3",
_score: 1,
_source: {
name: "alicia",
age: 2
}
}
Why (tom AND age:25) OR age:2 is not giving same results than tom AND age:25 OR age:2 ?
Hi @ebuildy ,
Elasticsearch will turn your queries into Lucene queries internally. Here is what happens:
Elasticsearch: (tom AND age:25) OR age:2
Lucene: (+_all:tom +age: 25) age: 2
Which means: "All documents that contain "tom" AND are 25 OR the ones that are 2". Both "tom" and "alica" match these criteria.
Whereas
Elasticsearch: tom AND age:25 OR age:2
Lucene: +_all:tom +age: 25 age: 2
means "all document that contain tom AND are 25. If they are 2 as well give them some more score".
As in this case, only "tom" matches.
I hope that helps.
Daniel
ebuildy
(Thomas Decaux)
October 19, 2016, 8:23am
3
True, is not "real" conditional, I forgot that!
Many thanks for the clarification.
I tried also "(name:tom AND age:18) OR age:2" VS "name:tom AND age:18 OR age:2" same thing.
BTW Is not possible to close the conversation in order to mark it as resolved?
Hi @ebuildy ,
Glad that I could help you.
I think you need to click the little checkbox below my answer to indicate that this response solves your question. Then it should be marked as resolved.
Daniel