I think any sub-clause can use a local syntax and branch off into
different query parsers. I could not find any examples of it either
but really need to do an advanced search and came up with this:

<str name="q">
   {!switch case='*:*' default=$q_lastName v=$lastName}
   AND {!switch case='*:*' default=$q_firstName v=$firstName}
   AND {!switch case='*:*' default=$q_organizationalUnit v=$organizationalUnit}
   ...
</str>
Full example: https://gist.github.com/arafalov/5e04884e5aefaf46678c

Somebody (with more knowledge) should write up an in-depth article on
this issue and whether the parent parser has to be default (lucene) or
whatever.

Regards,
   Alex.
Personal website: http://www.outerthoughts.com/
Current project: http://www.solr-start.com/ - Accelerating your Solr proficiency


On Wed, Jul 9, 2014 at 11:26 PM, Bruce Johnson <hbrucejohn...@gmail.com> wrote:
> Thank you so much for the quick reply, Erik. And wow: I didn't realize you
> could use join that fluidly. Very nice.
>
> Is there some trove of Solr doc that I'm missing where this natural syntax
> is explained? I wouldn't have asked such a basic question except that I
> found no evidence that this was possible.
>
>
>
>
> On Wed, Jul 9, 2014 at 12:07 PM, Erik Hatcher <erik.hatc...@gmail.com>
> wrote:
>
>> 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 <hbrucejohn...@gmail.com>
>> 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
>>
>>

Reply via email to