[ 
https://issues.apache.org/jira/browse/SOLR-2907?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13970428#comment-13970428
 ] 

Harsha B V commented on SOLR-2907:
----------------------------------

Hi all,

I am using Solr 4.8.0 and had faced the same problem but with some trial and 
error I was able to fix it.

In my schema.xml I have:
<field name="id" type="string" indexed="true" stored="true" required="true" 
multiValued="false"/> 
<field name="name" type="text_general" indexed="true" stored="true" 
multiValued="false"/>
<field name="last_modified" type="date" indexed="true" stored="true" 
multiValued="false"/>
unique key is set as:
<uniqueKey>id</uniqueKey>

In my data-config.xml I have:
<dataConfig>
    <dataSource name="ds1" type="JdbcDataSource"
    driver="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:@blah.blah"
    user="blah blah"
    password="blah blah"/>
        
        <script>  
                <![CDATA[ 
                function removeNullDateFields(row) { 
                        var std_date = row.get('last_modified');
                        
                        if (std_date === null || true === std_date.isEmpty() || 
std_date === '') {
                row.remove('last_modified');
            }
                        return row;
                } 
                ]]>  
    </script>
        
        <document name="search_doc">
                <entity name="search" pk="ID"           
                                query="Select 
                                                        std.studentID,
                                                        std.studentName,
                                                        std.last_modified,
                                                From student std"
                                deltaImportQuery="Select 
                                                        std.studentID,
                                                        std.studentName,
                                                From student std where 
studentID='${dataimporter.delta.ID}'"
                deltaQuery="select studentID as ID from student where 
to_char(last_modified, 'YYYY-MM-DD HH24:MI:SS') &gt; 
'${dataimporter.last_index_time}'"
                                deletedPkQuery="select deleted_id as ID FROM 
delete_status WHERE to_char(deleted_date, 'YYYY-MM-DD HH24:MI:SS') &gt; 
'${dataimporter.last_index_time}'"
                                dataSource="ds1" 
transformer="DateFormatTransformer,script:removeNullDateFields">
            <field column="STUDENTID" name="id"/>
                        <field column="STUDENTNAME" name="name"/>
                        <field column="LAST_MODIFIED" name="last_modified" 
xpath="/RDF/item/date" dateTimeFormat="yyyy-MM-dd HH:mm:ss"/>
        </entity>
        </document>
</dataConfig>

As you can see, 
--> I have used the entity's 'pk' attribute and set the value as "ID" (In 
capital letters - uniqueKey value)
--> Use the same "ID" in 'deltaImportQuery' as ${dataimporter.delta.ID}
--> "ID" must be used as it is in 'deltaQuery' select statement as "select ID 
from ..." 
        (if you different name for ID column in database, then use 'as' keyword 
in select statement. In my case I had 'studentID' as primary key in student 
table. So I used it as  "select  as studentID as ID from ..."
--> The same applies to 'deletedPkQuery'

At present its working fine for me. Any updation in database is reflected in 
Solr as well.

See if this helps. Cheers!!!



> java.lang.IllegalArgumentException: deltaQuery has no column to resolve to 
> declared primary key pk='ITEM_ID, CATEGORY_ID'
> -------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SOLR-2907
>                 URL: https://issues.apache.org/jira/browse/SOLR-2907
>             Project: Solr
>          Issue Type: Bug
>          Components: contrib - DataImportHandler, Schema and Analysis
>    Affects Versions: 3.4
>            Reporter: Alan Baker
>
> We are using solr for our site and ran into this error in our own schema and 
> I was able to reproduce it using the dataimport example code in the solr 
> project.  We do not get this error in SOLR 1.4 only started seeing it as we 
> are working to upgrade to 3.4.0.  It fails when delta-importing linked tables.
> Complete trace:
> Nov 18, 2011 5:21:02 PM org.apache.solr.handler.dataimport.DataImporter 
> doDeltaImport
> SEVERE: Delta Import Failed
> java.lang.IllegalArgumentException: deltaQuery has no column to resolve to 
> declared primary key pk='ITEM_ID, CATEGORY_ID'
>       at 
> org.apache.solr.handler.dataimport.DocBuilder.findMatchingPkColumn(DocBuilder.java:849)
>       at 
> org.apache.solr.handler.dataimport.DocBuilder.collectDelta(DocBuilder.java:900)
>       at 
> org.apache.solr.handler.dataimport.DocBuilder.collectDelta(DocBuilder.java:879)
>       at 
> org.apache.solr.handler.dataimport.DocBuilder.doDelta(DocBuilder.java:285)
>       at 
> org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:179)
>       at 
> org.apache.solr.handler.dataimport.DataImporter.doDeltaImport(DataImporter.java:390)
>       at 
> org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:429)
>       at 
> org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:408)
> I used this dataConfig from the wiki on the data import:
> <dataConfig>
>     <dataSource driver="org.hsqldb.jdbcDriver" 
> url="jdbc:hsqldb:./example-DIH/hsqldb/ex" user="sa" />
>     <document>
>    <entity  name="item" pk="ID" 
>                       query="select * from item" 
>             deltaImportQuery="select * from item where 
> ID=='${dataimporter.delta.id}'"
>             deltaQuery="select id from item where last_modified &gt; 
> '${dataimporter.last_index_time}'">
>             <entity name="item_category" pk="ITEM_ID, CATEGORY_ID"
>                     query="select CATEGORY_ID from item_category where 
> ITEM_ID='${item.ID}'"
>                     deltaQuery="select ITEM_ID, CATEGORY_ID from 
> item_category where last_modified > '${dataimporter.last_index_time}'"
>                     parentDeltaQuery="select ID from item where 
> ID=${item_category.ITEM_ID}">
>                 
>                       <entity name="category" pk="ID"
>                         query="select DESCRIPTION as cat from category where 
> ID = '${item_category.CATEGORY_ID}'"
>                         deltaQuery="select ID from category where 
> last_modified &gt; '${dataimporter.last_index_time}'"
>                         parentDeltaQuery="select ITEM_ID, CATEGORY_ID from 
> item_category where CATEGORY_ID=${category.ID}"/>
>               </entity>
>         </entity>
>         
>     </document>
> </dataConfig>
> To reproduce use the data config from above and set the dataimport.properties 
> last update times to before the last_modifed date in the example data.  I my 
> case I had to set the year to 1969.  Then run a delta-import and the 
> exception occurs.  Thanks.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to