It all depends on what your queries look like - what input data does your application have and what data does it need to retrieve.
My recommendation is that you store first name and last name as separate, multivalued fields if you indeed need to query by precisely a first or last name, but also store the full name as a separate multivalued text field. If you want to search by only first or last name, fine. If you want to search by full name or wildcards, etc., you can use the full name field, using phrase query. You can use an update request processor to combine first and last name into that third field. You could also store the full name in a fourth field as raw JSON if you really need structure in the result. The third field might have first and last name with a special separator such as "|", although a simple comma is typically sufficient. -- Jack Krupansky On Fri, Apr 15, 2016 at 10:58 AM, Davis, Daniel (NIH/NLM) [C] < daniel.da...@nih.gov> wrote: > Short answer - JOINs, external query outside Solr, Elastic Search ;) > Alternatives: > * You get back an id for each document when you query on "Nino". You > look up the last names in some other system that has the full list. > * You index the authors in another collection and use JOINs > * You store the author_array as formatted, escaped JSON, stored, but not > indexed (or analyzed). When you get the data back, you navigate the JSON > to the author_array, get the value, and parse that value as JSON. Now you > have the full list. > * This is a sweet spot for Elastic Search, to be perfectly honest. > > -----Original Message----- > From: Bastien Latard - MDPI AG [mailto:lat...@mdpi.com.INVALID] > Sent: Friday, April 15, 2016 7:52 AM > To: solr-user@lucene.apache.org > Subject: Can a field be an array of fields? > > Hi everybody! > > /I described a bit what I found in another thread, but I prefer to create > a new thread for this specific question.../ *It's **possible to create an > array of string by doing (incomplete example): > - in the data-conf.xml:* > <entity name="solr_articles" query="select title, abstract from articles"> > > <entity name="authors_array" query="select given_name, last_name > from authors WHERE article_id='${solr_articles.id}'"> > <field column="title" name="title" /> > <field column="abstract" name="abstract" /> > <field column="given_name" name="given_name" /> > <field column="last_name" name="last_name" /> > </entity> > > </entity> > > *- in schema.xml: > *<field name="title" type="string" indexed="false" stored="true" > required="false" multiValued="true" /> > <field name="abstract" type="string" indexed="false" stored="true" > required="false" multiValued="true" /> > <field name="given_name" type="string" indexed="false" stored="true" > required="false" multiValued="true" /> > <field name="last_name" type="string" indexed="false" stored="true" > required="false" multiValued="true" /> > > And this provides something like: > > "docs":[ > { > [...] > "given_name":["Bastien", "Matthieu", "Nino"], > "last_name":["lastname1", "lastname2", > "lastname3", "lastname4"], > > [...] > > > *Note: there can be one author with only a last_name, and then we are > unable to tell which one it is...* > > My goal would be to get this as a result: > > "docs":[ > { > [...] > "authors_array": > [ > [ > "given_name":["Bastien"], > "last_name":["lastname1"] > ], > [ > "last_name":["lastname2"] > ], > [ > "given_name":["Matthieu"], > "last_name":["lastname2"] > ], > [ > "given_name":["Nino"], > "last_name":["lastname4"] > ], > ] > [...] > > > Is there any way to do this? > /PS: I know that I could do '//select if(a.given_name is not null, > a.given_name ,'') as given_name, [...]//' but I would like to get an > array.../ > > I tried to add something like that to the schema.xml, but this doesn't > work (well, it might be of type 'array'): > <field name="authors_array" type="string" indexed="true" stored="true" > required="false" multiValued="true"/> > > Kind regards, > Bastien Latard > Web engineer > -- > MDPI AG > Postfach, CH-4005 Basel, Switzerland > Office: Klybeckstrasse 64, CH-4057 > Tel. +41 61 683 77 35 > Fax: +41 61 302 89 18 > E-mail: > lat...@mdpi.com > http://www.mdpi.com/ > >