I'm using the same cross-core join functionquery quite extensively in my
use case: for facet queries, filter queries and field aliasing. I tried to
derefence the join query syntax with local parameters to enable clean
client request, but this seemed not so simple and only possible via
introducing a 2nd local parameter...

The regular join query syntax with dereferenced parameter:
{!join fromIndex=core2 from=core2_a to=core1_a v=$qq}

This is always parsed to:
{!join fromIndex=core2 from=core2_a to=core1_a}core1_df:<value of $qq>

The problem is that the df parameter (core1_df) is set a field in core1 for
the default query field in the main query clause (for the regular searches)
and doesn't exist in the core2. Hence this causes a 'field <df> not found'
error.

The "workaround" that I found, is to define the 2nd local parameter as a
query (thanks to SOLR-2128 <https://issues.apache.org/jira/browse/SOLR-2128>
):
{!join fromIndex=core2 from=core2_a to=core1_a v=$jqq}
with:
jqq={!df=core2_df v=$qq}
or
jqq={!term f=core2_df v=$qq}

This was the only approach that I found where the join was parsed/executed
as I wanted in the facet queries, filter queries and field aliasing. So
this solved my issue.

However, unless there is a syntax that I overlooked (in that case, thanks
for pointing this out), I think it would make sense to add a df and/or qf
local parameter to the cross core join query. In a typical use case, the
joined core2 will have a completely different schema than the main core1.
So suggestion is to enable a syntax as:
{!join fromIndex=core2 from=core2_a qf=core2_df to=core1_a v=$qq}

All comments welcome!

-----
*Kind regards, Vriendelijke groeten, Cordialement,*

Paul Blanchaert
*www.amosis.eu*
Tel: +32 497 05.01.03

Reply via email to