23

I notice Solr 4.0 has introduced 'join' feature for documents having relationships. this is great, however, I notice examples given by http://wiki.apache.org/solr/Join are for single core which all documents are in single index.

Does anybody know if I can use 'join' for multiple core?

zx_wing
  • 1,918
  • 3
  • 26
  • 39

1 Answers1

42

This comment says it's possible by using:

{!join from=fromField to=toField fromIndex=fromCoreName}fromQuery

I tried it myself, and here's a more detailed example: Have two cores

  • brands {id,name}
  • products {id, name, brand_id}

BRANDS: {1, Apple}, {2, Samsung}, {3, HTC}

PRODUCTS: {1, iPhone, 1}, {2, iPad, 1}, {3, Galaxy S3, 2}, {4, Galaxy Note, 2}, {5, One X, 3}

http://example.com:8999/solr/brands/select?q=*:*&fq={!join from=brand_id to=id fromIndex=products}name:iPad

This translates to something like:

SELECT b.* FROM brands b
       INNER JOIN products p ON b.id=p.brand_id
       WHERE p.name="iPad";

Result will be: {id: "1", name:"Apple"}

mjalajel
  • 2,171
  • 21
  • 27
  • 3
    Thx for the nice example. More precisely the SQL equivalent is `SELECT b.* FROM brands b INNER JOIN products p ON b.id=p.brand_id WHERE p.name="iPad";` since Solr can't give the fields of the fromCore :-( – arun Mar 21 '13 at 04:36
  • The query is invalid, it should be: `q=name:iPad&fq={!join from=brand_id to=id fromIndex=products}` or `q=*:*&fq={!join from=brand_id to=id fromIndex=products}name:iPad`. `q=:` is invalid. – zengr Jul 16 '13 at 21:14
  • 1
    @zengr: Yes, the *:* is displayed as a formatting option, it's fixed now. – mjalajel Sep 16 '13 at 13:56
  • Is it possible to do something like this if for example the products.id was an array of ids? – Adam Apr 14 '21 at 13:57
  • @Adam I believe so, yes. – mjalajel Apr 14 '21 at 21:12