Thanks Ephraim for your response. Actually I am not using DIH to Sync the data from DB, I wrote on DB-SYNC by myself, and I am directly retrieving rows from MySQL-DB and Indexing to Solr.
On my Earlier cases - I Picked Rows with Column Label from DB, and Similar Column Defined in my Sync Program, It Picks the data and Index it, One -to-One So in that case, One to Many - I have to use a inner-loop (Based on no. of Candidate Education or Candidate Employer) to Index (For Candidate Education and Candidate Employer ) On Thu, Aug 26, 2010 at 4:59 PM, Ephraim Ofir <ephra...@icq.com> wrote: > As far as I can tell you should use multiValued for these fields: > > <field name="education" type="textgen" indexed="true" stored="true" > multiValued="true"/> > <field name="employer" type="textgen" indexed="true" stored="true" > multiValued="true"/> > > In order to get the data from the DB you should either create a sub > entity with its own query or (the better performance option) use > something like: > > SELECT cp.name, > GROUP_CONCAT(ce.CandidateEducation SEPARATOR '|') AS > multiple_educations, > GROUP_CONCAT(e.Employer SEPARATOR '|') AS multiple_employers > FROM CandidateProfile_Table cp > LEFT JOIN CandidateEducation_Table ce ON cp.name = ce.name > LEFT JOIN Employers_Table e ON cp.name = e.name > GROUP BY cp.name > > This creates one line with the educations and employers concatenated > into pipe (|) delimited fields. Then you'd have to break up the > multiple fields using a RegexTransformer - use something like: > > <entity name="candidates" > query="...see above..." > transformer="RegexTransformer" > > > <field name="education" column="multiple_educations" > splitBy="\|"/> > <field name="employer" column="multiple_employers" > splitBy="\|"/> > </entity> > > The SQL probably doesn't fit your DB schema, but it's just to clarify > the idea. You might have to pick a different field separator if pipe > (|) might be in your data... > > Ephraim Ofir > > > -----Original Message----- > From: Sumit Arora [mailto:sumit1...@gmail.com] > Sent: Thursday, August 26, 2010 1:36 PM > To: solr-user@lucene.apache.org > Subject: Candidate Profile Search which have multiple employers and > Educations. > > I have to search candidate's profile , on which I have following Tables > : > > Candidate Profile Record : CandidateProfile_Table > > CandidateEducation : CandidateEducation_Table // EducationIn Different > Institutes or Colleges : > > Employers : Employers_Table //More than One Employers : > > If I denormalize this all three Table : > > CandidateProfile_Table - 1 Row for Sumit > > CandidateEducation_Table - 5 Rows for Sumit > > Employers_Table - 5 Rows for Sumit > > If these three tables will go to Index in Solr , It will create 25 > Documents > for one row. > > > In this Case What Should be My Approach : > > DeNormalize all three tables and while querying from Solr use Field > Collpase > parameter by CandidateProfile Id, So It will return one record. > > Or > > I should use CandidateEducation_Table,CandidateEducation_Table as > MultiValued in Solr ? > > > If that is the case, then How I can apply Solr way to use MultiValue > e.g; > > I need to use Following Configuration in Scehma.xml : > > > <field name="education" type="textgen" indexed="true" stored="true"/> > <field name="employer" type="textgen" indexed="true" stored="true"/> > > > After this : > > > I should pick all education values(from MySql Education Database Table) > concerned to one profile > > and keep this in a one variable - EducationValuesForSolr > > and then EducationValuesForSolr's value need to assign to Schema.XML > defined > variable education ? > > > Please let me know If I am using right approach and Comments? > > /Sumit >