Maybe something like q=*:* AND NOT {!join … } would do the trick? (it’ll
depend on your version of Solr for support of the {!…} more natural nested
queries)
Erik
On Jul 9, 2014, at 11:24 AM, Bruce Johnson <[email protected]> wrote:
> === Short-version ===
> Is there a way to join on the complement of a query? I want the only the
> Solr documents for which the nested join query does not match.
>
> === Longer-version ===
> Query-time joins with {!join} are great at modeling the SQL equivalent of
> patterns like this:
>
> SELECT book_name FROM books WHERE id
> IN (SELECT book_id FROM chapters WHERE chapter_title = "Foo")
>
> This would find the name of books having chapters entitled "Foo". (Assuming
> the chapters table have the column 'book_id' that point back to the book
> record containing them.)
>
> That's great.
>
> Is there a way in Solr to query for the complement of that? In SQL terms,
> this:
>
> SELECT book_name FROM books WHERE id
> NOT IN (SELECT book_id FROM chapters WHERE chapter_title = "Foo")
>
> This would find books that do not have chapters entitled "Foo".
>
> It isn't the same as querying (in Solr terms) for something like
>
> {!join to=id from=book_id}-chapter_title:"Foo" // note the negation
>
> because it would still match other chapters in the same book that are not
> entitled "Foo", causing the join to still identify the book based on its
> other non-Foo chapters.
>
> Any advice would be greatly appreciated. I'm also open to other ways of
> thinking about the problem. Perhaps there are alternative indexing patterns
> that could accomplish the same goal.
>
> Many thanks,
> Bruce