Bram: Here’s a fuller explanation that you might be interested in:
https://lucidworks.com/2011/12/28/why-not-and-or-and-not/ Best, Erick > On Jun 17, 2019, at 11:32 AM, Bram Biesbrouck > <bram.biesbro...@reinvention.be> wrote: > > On Mon, Jun 17, 2019 at 7:11 PM Shawn Heisey <apa...@elyograg.org> wrote: > >> On 6/17/2019 4:46 AM, Bram Biesbrouck wrote: >>> q={!parent which=-(parentUri:*)}*:* >> >> Pure negative queries do not work in Lucene. Sometimes, when you do a >> single-clause negative query, Solr is able to detect the problem and >> automatically make an adjustment so the query works. This happens >> transparently so you never notice. >> >> In essence, what your negative query tells Lucene is "start with >> nothing, and then subtract docs that match this query." Since you >> started with nothing and then subtracted, you get nothing. >> >> Also, that's a wilcard query. Which could be very slow if the possible >> number of values in parentUri is more than a few. If that field can >> only contain a very small number of values, then a wildcard query might >> be fast. >> >> The following query solves both problems -- starting with all docs and >> then subtracting things that match the query clause after that: >> >> *:* -parentUri:[* TO *] >> >> This will return all documents that do not have the parentUri field >> defined. The [* TO *] syntax is an all-inclusive range query. >> > > Hi Shawn, > > Awesome elaborate explanation, thank you. Also thanks for the optimization > hint. I found both approaches online, but didn't realize there was a > performance difference . > Digging deeper, I've found this SO post, basically explaining why it worked > some of the time, but not in all cases: > https://stackoverflow.com/questions/10651548/negation-in-solr-query > > best, > > b.