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.