The field 'id' is repeated for pet also rename it to something else
say
 <entity name="pets" pk="id"
               query="SELECT id,name,birth_date,type_id FROM pets WHERE
owner_id='${owners.id}'"
               parentDeltaQuery="SELECT id FROM owners WHERE
id=${pets.owner_id}">
           <field column="id"          name="petid"/>
</entity>

--Noble

On Tue, Jun 3, 2008 at 3:28 AM, Julio Castillo <[EMAIL PROTECTED]> wrote:
> Shalin,
> I experimented with it, and the null pointer exception has been taken care
> of. Thank you.
>
> I have a different problem now. I believe it is a syntax/specification
> problem.
>
> When importing data, I got the following exceptions:
> SEVERE: Exception while adding:
> SolrInputDocumnt[{comboId=comboId(1.0)={owners-9},
> userName=userName(1.0)={[David, Schroeder]}}]
>
> org.apache.solr.common.SolrException: Document [null] missing required
> field: id
>        at
> org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:289)
>        at
> org.apache.solr.handler.dataimport.DataImportHandler$1.upload(DataImportHand
> ler.java:263)
>        ...
>
> The problem arises the moment I try to include nested entities (e.g. pets
> -the problem does not occur if I don't use the transformer, but I have to
> use the transformer because other unrelated entities also have id's).
> My data config file looks as follows.
>
> <dataConfig>
>  <document name="doc-1">
>    <entity name="owners" pk="id"
>            query="select id,first_name,last_name FROM owners"
>            transformer="TemplateTransformer">
>        <field column="id"  name="comboId"  template="owners-${owners.id}"/>
>        <field column="first_name" name="userName"/>
>        <field column="last_name"  name="userName"/>
>
>        <entity name="pets" pk="id"
>                query="SELECT id,name,birth_date,type_id FROM pets WHERE
> owner_id='${owners.id}'"
>                parentDeltaQuery="SELECT id FROM owners WHERE
> id=${pets.owner_id}">
>            <field column="id"          name="id"/>
>            <field column="name"        name="name"/>
>            <field column="birth_date" name="birthDate"/>
>        </entity>
>    </entity>
>  </document>
> </dataConfig>
>
> The debug output of the data import looks as follows:
>
> ....
> - <lst name="verbose-output">
>  - <lst name="entity:owners">
>    - <lst name="document#1">
>      <str name="query">select id,first_name,last_name FROM owners</str>
>      <str name="time-taken">0:0:0.15</str>
>      <str>----------- row #1-------------</str>
>      <int name="id">1</int>
>      <str name="first_name">George</str>
>      <str name="last_name">Franklin</str>
>      <str>---------------------------------------------</str>
>      - <lst name="transformer:TemplateTransformer">
>        <str>---------------------------------------------</str>
>        <str name="id">owners-1</str>
>        <str name="first_name">George</str>
>        <str name="last_name">Franklin</str>
>        <str>---------------------------------------------</str>
>        - <lst name="entity:pets">
>          <str name="query">SELECT id,name,birth_date,type_id FROM pets
> WHERE owner_id='owners-1'</str>
>          <str name="time-taken">0:0:0.0</str>
>          </lst>
>      </lst>
>  </lst>
> + <lst name="document#1">
> ....
>
> Thanks again
>
> ** julio
>
>
> -----Original Message-----
> From: Shalin Shekhar Mangar [mailto:[EMAIL PROTECTED]
> Sent: Saturday, May 31, 2008 10:26 AM
> To: solr-user@lucene.apache.org
> Subject: Re: How to describe 2 entities in dataConfig for the DataImporter?
>
> Hi Julio,
>
> I've fixed the bug, can you please replace the exiting
> TemplateTransformer.java in the SOLR-469.patch and use the attached
> TemplateTransformer.java file. We'll add the changes to our next patch.
> Sorry for all the trouble.
>
> On Sat, May 31, 2008 at 10:31 PM, Noble Paul ??????? ??????
> <[EMAIL PROTECTED]> wrote:
>> julio,
>> Looks like it is a bug.
>> We can give u a new TemplateTransformer.java which we will incorporate
>> in the next patch --Noble
>>
>> On Sat, May 31, 2008 at 12:24 AM, Julio Castillo
>> <[EMAIL PROTECTED]> wrote:
>>> I'm sorry Shalin, but I still get the same Null Pointer exception.
>>> This is my complete dataconfig.xml (I remove the parallel entity to
>>> narrow down the scope of the problem).
>>> <dataConfig>
>>>  <document name="doc-1">
>>>    <entity name="vets" pk="id"
>>>            query="select id as idAlias,first_name,last_name FROM vets"
>>>            deltaQuery="SELECT id as idAlias FROM vets WHERE
>>> last_modified > '${dataimporter.last_index_time}'"
>>>            transformer="TemplateTransformer">
>>>        <field column="id"              name="id"
>>> template="vets-${vets.idAlias}"/>
>>>        <field column="first_name"      name="userName"/>
>>>        <field column="last_name"       name="userName"/>
>>>    </entity>
>>>  </document>
>>> </dataConfig>
>>>
>>> Thanks again.
>>>
>>> ** julio
>>>
>>> -----Original Message-----
>>> From: Shalin Shekhar Mangar [mailto:[EMAIL PROTECTED]
>>> Sent: Friday, May 30, 2008 11:38 AM
>>> To: solr-user@lucene.apache.org
>>> Subject: Re: How to describe 2 entities in dataConfig for the
> DataImporter?
>>>
>>> The surname is used just as an example of a field.
>>>
>>> The NullPointerException is because the same field "id" tries to use
>>> it's own value in a template. The template cannot contain the same
>>> field on which it is being applied. I'd suggest that you get the id
>>> aliased to another name, for example using a query "select id as
>>> idAlias from vets" and then
>>> use:
>>> <field column="id" template="vets-${vets.idAlias}" />
>>>
>>> That should work, let me know if you face a problem.
>>>
>>> On Fri, May 30, 2008 at 10:40 PM, Julio Castillo
>>> <[EMAIL PROTECTED]>
>>> wrote:
>>>> Thanks for all the leads.
>>>> I did get however a null pointer exception while implementing it:
>>>>
>>>> May 30, 2008 9:57:50 AM
>>>> org.apache.solr.handler.dataimport.EntityProcessorBase
>>>> applyTransformer
>>>> WARNING: transformer threw error
>>>> java.lang.NullPointerException
>>>>   at
>>>> org.apache.solr.handler.dataimport.TemplateTransformer.transformRow(
>>>> Te
>>>> mplate
>>>> Transformer.java:55)
>>>>   at
>>>> org.apache.solr.handler.dataimport.EntityProcessorBase.applyTransfor
>>>> me
>>>> r(Enti
>>>> tyProcessorBase.java:186)
>>>>
>>>> Looking at the source code, it appears that the resolverMap is null.
>>>> The resolver returned null given the entityName.
>>>>
>>>> Looking at the documentation, there is the reference to a
> eparent.surname.
>>>> The example says:
>>>> <field column="namedesc" template="hello${e.name},${eparent.surname}"
>>>> />
>>>>
>>>> I'm afraid, I don't know what an eparent.surname is. This is my
>>>> current dataconfig.xml configuration excerpt:
>>>>
>>>> <entity name="vets" pk="id"  query="..." deltaQuery="..."
>>>> transformer="TemplateTransformer">
>>>>  <field column="id" name="id" template="vets-${vets.id}"/>  ...
>>>>
>>>> Am I missing a surname? Whatever that may be?
>>>>
>>>> Thanks
>>>>
>>>> ** julio
>>>>
>>>> -----Original Message-----
>>>> From: Noble Paul ??????? ?????? [mailto:[EMAIL PROTECTED]
>>>> Sent: Thursday, May 29, 2008 11:10 PM
>>>> To: solr-user@lucene.apache.org
>>>> Subject: Re: How to describe 2 entities in dataConfig for the
>>> DataImporter?
>>>>
>>>> Sorry I forgot to mention that.
>>>> http://wiki.apache.org/solr/DataImportHandler#head-a6916b30b5d7605a9
>>>> 90
>>>> fb03c4
>>>> ff461b3736496a9
>>>> --Noble
>>>>
>>>> On Fri, May 30, 2008 at 11:37 AM, Shalin Shekhar Mangar
>>>> <[EMAIL PROTECTED]> wrote:
>>>>> You need to enable TemplateTransformer for your entity. For example:
>>>>> <entity name="owners" pk="id" query="...."
>>>>> transformer="TemplateTransformer">
>>>>>
>>>>> On Fri, May 30, 2008 at 11:31 AM, Julio Castillo
>>>>> <[EMAIL PROTECTED]> wrote:
>>>>>> Noble,
>>>>>> I tried the template setting for the "id" field, but I didn't
>>>>>> notice any different behavior. I also didn't see where this would be
> reflected.
>>>>>> I looked at the fields and the debug output for the dataImporter
>>>>>> and couldn't see any reference to a modified id name (per the
>>>>>> template instructions).
>>>>>>
>>>>>> The behavior in the end seemed to be the same. Did I miss anything?
>>>>>> I assume that the <uniqueKey>id</uniqueKey> setting in the
>>>>>> schema.xml remains the same?
>>>>>>
>>>>>> Thanks again
>>>>>>
>>>>>> ** julio
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Noble Paul ??????? ?????? [mailto:[EMAIL PROTECTED]
>>>>>> Sent: Thursday, May 29, 2008 9:46 PM
>>>>>> To: solr-user@lucene.apache.org
>>>>>> Subject: Re: How to describe 2 entities in dataConfig for the
>>>> DataImporter?
>>>>>>
>>>>>> Consider constructing the id concatenating an extra string for
>>>>>> each document . You can construct that field using the
> TeplateTransformer.
>>>>>> in the entity owners keep the id as
>>>>>>
>>>>>> <field column="id" name="id" template="owners-${owners.id}"/> and
>>>>>> in vets <field column="id" name="id" template="vets-${vets.id}"/>
>>>>>>
>>>>>> or anything else which can make it unique
>>>>>>
>>>>>> --Noble
>>>>>>
>>>>>> On Fri, May 30, 2008 at 10:05 AM, Shalin Shekhar Mangar
>>>>>> <[EMAIL PROTECTED]> wrote:
>>>>>>> That will happen only if id is the uniqueKey in Solr and the id
>>>>>>> coming from both your tables have same values. In that case, they
>>>>>>> will overwrite each other. You will need a separate uniqueKey (on
>>>>>>> other than id field).
>>>>>>>
>>>>>>> On Fri, May 30, 2008 at 6:34 AM, Julio Castillo
>>>>>>> <[EMAIL PROTECTED]>
>>>>>> wrote:
>>>>>>>> Thanks Shalin,
>>>>>>>> I tried putting everything under the same document (two
>>>>>>>> different unrelated entities), and got a bit further.
>>>>>>>>
>>>>>>>> My problem now appears to be both of them stepping on each other
>>>>>>>> due to
>>>>>> "id"
>>>>>>>> conflicts. Currently my id is defined in my schema as <field
>>>>>>>> name="id" type="long" indexed="true" stored="true"
>>>>>>>> required="true"/>
>>>>>>>>
>>>>>>>> Do I have to create a new "id" field?
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>>
>>>>>>>> ** julio
>>>>>>>>
>>>>>>>> -----Original Message-----
>>>>>>>> From: Shalin Shekhar Mangar [mailto:[EMAIL PROTECTED]
>>>>>>>> Sent: Thursday, May 29, 2008 11:40 AM
>>>>>>>> To: solr-user@lucene.apache.org
>>>>>>>> Subject: Re: How to describe 2 entities in dataConfig for the
>>>>>> DataImporter?
>>>>>>>>
>>>>>>>> Hi Julio,
>>>>>>>>
>>>>>>>> The first data-config is correct.
>>>>>>>>
>>>>>>>> You're running DataImportHandler in debug mode which creates
>>>>>>>> only the first 10 documents by default. You can also add count=N
>>>>>>>> to index only the first N documents. But this is intended only
>>>>>>>> for debugging purposes. If you want to do a full-import just use
>>>>>>>> /dataimport?command=full-import. By default, a full-import
>>>>>>>> automatically
>>>>>> cleans and commits.
>>>>>>>>
>>>>>>>> Hope that helps.
>>>>>>>>
>>>>>>>> On Thu, May 29, 2008 at 11:42 PM, Julio Castillo
>>>>>>>> <[EMAIL PROTECTED]>
>>>>>>>> wrote:
>>>>>>>>> I have 2 dB tables unrelated to each other that I want to index.
>>>>>>>>>
>>>>>>>>> I have tried 2 approaches for specifying them in my
>>>>>>>>> data-config.xml
>>>>>> file.
>>>>>>>>> None of them seem to work (it seems I can only get data for the
>>>>>>>>> first one listed).
>>>>>>>>>
>>>>>>>>> CASE 1)
>>>>>>>>> <dataConfig>
>>>>>>>>>  <document name="test">
>>>>>>>>>    <entity name="owners" pk="id" query="....">
>>>>>>>>>      <field column="id" name="id"/>
>>>>>>>>>      <field column=name" name="userName"/>
>>>>>>>>>    </entity>
>>>>>>>>>    <entity name="vets" pk="id" query="....">
>>>>>>>>>      <field column="id" name="id"/>
>>>>>>>>>      <field column=name" name="userName"/>
>>>>>>>>>    </entity>
>>>>>>>>>  </document>
>>>>>>>>> </dataConfig>
>>>>>>>>>
>>>>>>>>> CASE 2)
>>>>>>>>> <dataConfig>
>>>>>>>>>  <document name="test-1">
>>>>>>>>>    <entity name="owners" pk="id" query="....">
>>>>>>>>>      <field column="id" name="id"/>
>>>>>>>>>      <field column=name" name="userName"/>
>>>>>>>>>    </entity>
>>>>>>>>>  </document>
>>>>>>>>>  <document name="test-2">
>>>>>>>>>    <entity name="vets" pk="id" query="....">
>>>>>>>>>      <field column="id" name="id"/>
>>>>>>>>>      <field column=name" name="userName"/>
>>>>>>>>>    </entity>
>>>>>>>>>  </document>
>>>>>>>>> </dataConfig>
>>>>>>>>>
>>>>>>>>> I ran the dataImporter as follows
>>>>>>>>> http://localhost:2455/solr/dataimport?command=full-import&debug
>>>>>>>>> =o
>>>>>>>>> n
>>>>>>>>> &v
>>>>>>>>> er
>>>>>>>>> bose=t
>>>>>>>>> rue&clean=true&commit=true
>>>>>>>>>
>>>>>>>>> After running Case 1 the output only shows documents under
>>>>>> entity:owners.
>>>>>>>>> And an empty reference to entity:vets (no data).
>>>>>>>>>
>>>>>>>>> After running Case 2, the output only shows documents under
>>>>>> entity:owners.
>>>>>>>>> No references to entity:vets.
>>>>>>>>>
>>>>>>>>> In either case, I have commented out the entity:owners and I do
>>>>>>>>> see the entity:vets data then.
>>>>>>>>>
>>>>>>>>> Thanks for your assistance
>>>>>>>>>
>>>>>>>>> Julio Castillo
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Regards,
>>>>>>>> Shalin Shekhar Mangar.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Regards,
>>>>>>> Shalin Shekhar Mangar.
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> --Noble Paul
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Regards,
>>>>> Shalin Shekhar Mangar.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> --Noble Paul
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Regards,
>>> Shalin Shekhar Mangar.
>>>
>>>
>>
>>
>>
>> --
>> --Noble Paul
>>
>
>
>
> --
> Regards,
> Shalin Shekhar Mangar.
>
>



-- 
--Noble Paul

Reply via email to