Folks:

Continuing my saga with DIH and use of its special commands. I have verified that the script functionality is indeed working. I also verified that '$skipRow' is working. But I don't think that '$deleteDocById' is working.

My script now looks as follows:

<script>
        <![CDATA[
                function DeleteRow(row) {
                                   var jid = row.get('Id');
                    var jis = row.get('IndexingStatus');
                    if ( jis == 4 ) {
                                       row.put('$deleteDocById', jid);
                                       row.remove('Col1');
                                       row.put('Col1', jid);
                                  }
               return row;
           }
     ]]>
 </script>

The theory is that rows whose 'IndexingStatus' value is 4 should be deleted from solr index. Just to be sure that javascript syntax was correct and checked out, I intentionally overwrite a field called 'Col1' in my schema with primary key of the document to be deleted.

On a clean and empty index, I import 47 rows from my dummy db. Everything checks out correctly since IndexingStatus for each row is 1. There are no rows to delete. I then go into the db and set one row with the IndexingStatus = 4. When I execute the dataimport, I find that all 47 documents are imported correctly. However, for the row for which 'IndexingStatus' was set to 4, the Col1 value is set correctly by the script transformer to be the primary key value for that row/document. However, I should not be seeing that document since the '$deleteDocById should have deleted this from solr.

Could this be a bug in solr? Or, am I misunderstanding how $deleteDocById works?

By the way, Noble, I tried to set the LogTransformer, and add logging per your suggestion. That did not work either. I set logLevel="debug", and also turned on solr logging in the admin console to be the max value (finest) and still no output.

Thanks,

- Bill



--------------------------------------------------
From: "Noble Paul ???????  ??????" <noble.p...@corp.aol.com>
Sent: Thursday, October 15, 2009 10:05 PM
To: <solr-user@lucene.apache.org>
Subject: Re: Using DIH's special commands....Help needed

use  LogTransformer to see if the value is indeed set

<entity name="post" transformer="script:DeleteRow,
RegexTransformer,LogTransformer"
         logTemplate="${post}"
         query=" select  Id, a, b, c, IndexingStatus from  prod_table
where (IndexingStatus = 1 or IndexingStatus = 4) ">

this should print out the entire row after the transformations



On Fri, Oct 16, 2009 at 3:04 AM, William Pierce <evalsi...@hotmail.com> wrote:
Thanks for your reply! I tried your suggestion. No luck. I have verified that I have version 1.6.0_05-b13 of java installed. I am running with the
nightly bits of October 7.  I am pretty much out of ideas at the present
time....I'd appreciate any tips/pointers.

Thanks,

- Bill

--------------------------------------------------
From: "Shalin Shekhar Mangar" <shalinman...@gmail.com>
Sent: Thursday, October 15, 2009 1:42 PM
To: <solr-user@lucene.apache.org>
Subject: Re: Using DIH's special commands....Help needed

On Fri, Oct 16, 2009 at 12:46 AM, William Pierce
<evalsi...@hotmail.com>wrote:

Thanks for your help.  Here is my DIH config file....I'd appreciate any
help/pointers you may give me. No matter what I do the documents are not
getting deleted from the index.  My db has rows whose 'IndexingStatus'
field
has values of either 1 (which means add it to solr), or 4 (which means
delete the document with the primary key from SOLR index).  I have two
transformers running.  Not sure what I am doing wrong.

<dataConfig>
 <script><![CDATA[
             function DeleteRow(row)    {
                 var jis = row.get('IndexingStatus');
                 var jid = row.get('Id');
                 if ( jis == 4 ) {
                      row.put('$deleteDocById', jid);
                  }
                 return row;
             }
     ]]></script>

 <dataSource type="JdbcDataSource"
           driver="com.mysql.jdbc.Driver"
           url="jdbc:mysql://localhost/db"
           user="******"
           password="*******"/>
 <document>
 <entity name="post" transformer="script:DeleteRow, RegexTransformer"
         query=" select  Id, a, b, c, IndexingStatus from  prod_table
where (IndexingStatus = 1 or IndexingStatus = 4) ">
      <field column="ptype" splitBy="," sourceColName="a" />
      <field column="wauth" splitBy=","  sourceColName="b" />
      <field column="miles" splitBy=","  sourceColName="c" />
 </entity>
 </document>
</dataConfig>


One thing I'd try is to use '4' for comparison rather than the number 4
(the
type would depend on the sql type). Also, for javascript transformers to
work, you must use JDK 6 which has javascript support. Rest looks fine to
me.

--
Regards,
Shalin Shekhar Mangar.





--
-----------------------------------------------------
Noble Paul | Principal Engineer| AOL | http://aol.com

Reply via email to