I see what you mean, however the request results in cartesian products ,
because of subordinate.q=*:* :
http://localhost:8981/solr/Collection1/query?q=*&fl=*,subordinate:[subquery]&subordinate.q=*:*&subordinate.fl=*&subordinate.collection=Collection2
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":0,
"params":{
"q":"*",
"fl":"*,subordinate:[subquery]",
"subordinate.fl":"*",
"subordinate.collection":"Collection2",
"subordinate.q":"*:*"}},
"response":{"numFound":2,"start":0,"docs":[
{
"id":"1",
"first_name":["John"],
"_version_":1674811207656144896,
"subordinate":{"numFound":3,"start":0,"docs":[
{
"id":"3",
"reporting_to":[2],
"first_name":["Thomas"],
"_version_":1674811297814806528},
{
"id":"4",
"reporting_to":[1],
"first_name":["Charles"],
"_version_":1674811297816903680},
{
"id":"5",
"reporting_to":[3],
"first_name":["Susan"],
"_version_":1674811297816903681}]
}},
{
"id":"2",
"first_name":["Peter"],
"_version_":1674811207659290624,
"subordinate":{"numFound":3,"start":0,"docs":[
{
"id":"3",
"reporting_to":[2],
"first_name":["Thomas"],
"_version_":1674811297814806528},
{
"id":"4",
"reporting_to":[1],
"first_name":["Charles"],
"_version_":1674811297816903680},
{
"id":"5",
"reporting_to":[3],
"first_name":["Susan"],
"_version_":1674811297816903681}]
}}]
}}
Once I add back the "join"criteria q={!fields f=reporting_to v=$row.id},
the error comes back...
http://localhost:8983/solr/Collection1/query?q=*&fl=*,subordinate:[subquery]&subordinate.fl=*&subordinate.collection=Collection2&subordinate.q={!fields
f=reporting_to v=$row.id}
{
"error":{
"metadata":[
"error-class","org.apache.solr.common.SolrException",
"root-error-class","org.apache.solr.common.SolrException"],
"msg":"while invoking subordinate:[subquery] on
doc=SolrDocument{id=stored,indexed,tokenized,omitNorms,indexOptions=DOCS<id:1>,
first_name=[stored,index",
"code":400}}
While I was writing an extensive response, just came across what seems to
be the solution:
http://localhost:8983/solr/Collection1/query?q=*&fl=*,subordinate:[subquery]&subordinate.fl=*&subordinate.collection=Collection2&subordinate.q={!term
f=reporting_to v=$row.id}
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":1,
"params":{
"json":"{\r\n params: {\r\n q: \"*\",\r\n fq: \"*\",\r\n
rows: 5,\r\n\tfl:\"*,subordinate:[subquery]\",\r\n
subordinate.fl:\"*\",\r\n subordinate.q:\"{!term f=reporting_to v=$
row.id}\",\r\n subordinate.fq:\"*\",\r\n subordinate.rows:\"5\",\r\n
subordinate.collection:\"Collection2\"\r\n }\r\n}\r\n\r\n\r\n\r\n"}},
"response":{"numFound":2,"start":0,"docs":[
{
"id":"1",
"first_name":["John"],
"_version_":1674811207656144896,
"subordinate":{"numFound":1,"start":0,"docs":[
{
"id":"4",
"reporting_to":[1],
"first_name":["Charles"],
"_version_":1674811297816903680}]
}},
{
"id":"2",
"first_name":["Peter"],
"_version_":1674811207659290624,
"subordinate":{"numFound":1,"start":0,"docs":[
{
"id":"3",
"reporting_to":[2],
"first_name":["Thomas"],
"_version_":1674811297814806528}]
}}]
}}
I don't remember when did I change it to !fields, the documentation had it
with !terms... which seems to be not working ether
q=name:john&fl=name,id,depts:[subquery]&depts.q={!terms
f=id *v=$row.dept_id*}&depts.rows=10
Erick, thanks for the suggestion of adding:
&subordinate.collection=Collection2
The solution is
http://torvmlnx03.temenosgroup.com:8983/solr/Collection1/query?q=*&fl=*,subordinate:[subquery]&subordinate.fl=*&subordinate.collection=Collection2&subordinate.q={!term%20f=reporting_to%20v=$row.id}
Regards,
Norbert
On Wed, 12 Aug 2020 at 14:41, Erick Erickson <[email protected]>
wrote:
> This works from a browser:
>
> http://localhost:8981/solr/Collection1/query?q=*&fl=*,subordinate:[subquery]&subordinate.q=*:*&subordinate.fl=*&subordinate.collection=Collection2
>
> One problem you’re having is that “fromIndex” is a _core_ not a
> collection. See:
> https://lucene.apache.org/solr/guide/8_2/transforming-result-documents.html
>
> It’s vaguely possible you could make it work by specifying something like
> fromIndex=Collection2_shard1_replica_n1
> if it was colocated on the node you’re querying, but you don’t want to go
> there…
>
> Best,
> Erick
>
> > On Aug 12, 2020, at 7:17 AM, Norbert Kutasi <[email protected]>
> wrote:
> >
> > Hi Dominique,
> >
> > Sorry, I was in a hurry to create a simple enough yet similar case that
> we
> > face with internally.
> >
> > reporting_to indeed is the right field , but the same error still
> persists,
> > something is seemingly wrong when invoking the *subquery *with
> *fromIndex*
> >
> > {
> > params: {
> > q: "*",
> > fq: "*",
> > rows: 5,
> > fl:"*,subordinate:[subquery fromIndex=Collection2]",
> > subordinate.fl:"*",
> > subordinate.q:"{!field f=reporting_to v=$row.id}",
> > subordinate.fq:"*",
> > subordinate.rows:"5",
> > }
> > }
> >
> > {
> > "error":{
> > "metadata":[
> > "error-class","org.apache.solr.common.SolrException",
> > "root-error-class","org.apache.solr.common.SolrException"],
> > "msg":"while invoking subordinate:[subqueryfromIndex=Collection2] on
> >
> doc=SolrDocument{id=stored,indexed,tokenized,omitNorms,indexOptions=DOCS<id:1>,
> > first_name=[stored,index",
> > "code":400}}
> >
> > Any help much appreciated, hopefully it's an error with the syntax I've
> > been using.
> >
> > Regards,
> > Norbert
> >
> > On Wed, 12 Aug 2020 at 12:49, Dominique Bejean <
> [email protected]>
> > wrote:
> >
> >> Hi Norbert,
> >>
> >> The field name in collection2 is "reporting_to" not "reporting".
> >>
> >> Dominique
> >>
> >>
> >>
> >> Le mer. 12 août 2020 à 11:59, Norbert Kutasi <[email protected]>
> a
> >> écrit :
> >>
> >>> Hello,
> >>>
> >>> We have been using [subquery] to come up with arbitrary complex
> >> hierarchies
> >>> in our document responses.
> >>>
> >>> It works well as long as the documents are in the same collection
> however
> >>> based on the reference guide I infer it can bring in documents from
> >>> different collections except it throws an error.
> >>>
> >>>
> >>
> https://lucene.apache.org/solr/guide/8_2/transforming-result-documents.html#subquery
> >>>
> >>>
> >>> We are on SOLR 8.2 and in this sandbox we have a 2 node SOLRCloud
> >> cluster,
> >>> where both collections have 1 shard and 2 NRT replicas to ensure nodes
> >> have
> >>> a core from each collection.
> >>> Basic Authorization enabled.
> >>>
> >>> Simple steps to reproduce this issue in this 2 node environment:
> >>> ./solr create -c Collection1 -s 1 -rf 2
> >>> ./solr create -c Collection2 -s 1 -rf 2
> >>>
> >>> Note: these collections are schemaless, however we observed the ones
> with
> >>> schemas.
> >>>
> >>> Collection 1:
> >>> <add>
> >>> <doc>
> >>> <field name = "id">1</field>
> >>> <field name = "first name">John</field>
> >>> </doc>
> >>> <doc>
> >>> <field name = "id">2</field>
> >>> <field name = "first name">Peter</field>
> >>> </doc>
> >>> </add>
> >>>
> >>> Collection 2:
> >>> <add>
> >>> <doc>
> >>> <field name = "id">3</field>
> >>> <field name = "first name">Thomas</field>
> >>> <field name = "reporting_to">2</field>
> >>> </doc>
> >>> <doc>
> >>> <field name = "id">4</field>
> >>> <field name = "first name">Charles</field>
> >>> <field name = "reporting_to">1</field>
> >>> </doc>
> >>> <doc>
> >>> <field name = "id">5</field>
> >>> <field name = "first name">Susan</field>
> >>> <field name = "reporting_to">3</field>
> >>> </doc>
> >>> </add>
> >>>
> >>>
> >>> http://localhost:8983/solr/Collection1/query
> >>> {
> >>> params: {
> >>> q: "*",
> >>> fq: "*",
> >>> rows: 5,
> >>> fl:"*,subordinate:[subquery fromIndex=Collection2]",
> >>> subordinate.fl:"*",
> >>> subordinate.q:"{!field f=reporting v=$row.id}",
> >>> subordinate.fq:"*",
> >>> subordinate.rows:"5"
> >>> }
> >>> }
> >>>
> >>> {
> >>> "error":{
> >>> "metadata":[
> >>> "error-class","org.apache.solr.common.SolrException",
> >>> "root-error-class","org.apache.solr.common.SolrException"],
> >>> "msg":"while invoking subordinate:[subqueryfromIndex=Collection2] on
> >>>
> >>>
> >>
> doc=SolrDocument{id=stored,indexed,tokenized,omitNorms,indexOptions=DOCS<id:1>,
> >>> first_name=[stored,index",
> >>> "code":400}}
> >>>
> >>>
> >>> Where do we make a mistake?
> >>>
> >>> Thank you in advance,
> >>> Norbert
> >>>
> >>
>
>