2012-01-18 2 views
0

У меня есть следующие поля:Solr ScriptTransformer возвращаемое значение

  • В базе данных у меня есть поле, которое property_industry_sector список разделенных запятыми Интс, нуль или пустая строка.
  • В конфигурации схемы Solr у меня есть то же поле property_industry_sector типа int и многозначное.

Моя проблема заключается в том, что я должен обращаться к разнице в конфигурации DataImportHandler, и моя попытка выглядит следующим образом:

<entity 
    name="property_industry_sector_extractor" 
    transformer="script:SplitIndustrySector" 
    query=" 
     SELECT property_industry_sector 
     FROM job 
     WHERE job.id = ${job.id} 
    "> 
    <field column="property_industry_sector" name="property_industry_sector" /> 
    </entity> 

Если ScriptTransformer имеет следующее определение:

function SplitIndustrySector(row) { 
    //var logger = java.util.logging.Logger.getLogger("org.apache.solr"); 

    if(row.get('property_industry_sector') !== null) { 
    if(false === row.get('property_industry_sector').isEmpty()) { 

     var pieces = row.get('property_industry_sector').split(','); 
     var arr = new java.util.ArrayList(); 
     for(var i=0, len=pieces.length; i<len; i++) { 
     arr.add(new java.lang.Integer(pieces[i])); 
     } 

     row.put('property_industry_sector', arr); 
     return row; 
    } 
    } 

    var arr = new java.util.ArrayList(); 
    arr.add(new java.lang.Integer(0)); 
    row.put('property_industry_sector', arr); 
    return row; 
} 

Проблема заключается в общем случае, когда значение является пустой или пустой строкой, потому что независимо от того, что делает трансформатор, я все равно получаю следующее исключение

property_industry_sector=property_industry_sector(1.0)={[, 0]}}] 
java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:493) 
    at java.lang.Integer.parseInt(Integer.java:514) 
    at org.apache.solr.schema.TrieField.createField(TrieField.java:374) 
    at org.apache.solr.schema.SchemaField.createField(SchemaField.java:97) 
    at org.apache.solr.update.DocumentBuilder.addField(DocumentBuilder.java:203) 
    at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:276) 
    at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:60) 
    at org.apache.solr.handler.dataimport.SolrWriter.upload(SolrWriter.java:73) 
    at org.apache.solr.handler.dataimport.DataImportHandler$1.upload(DataImportHandler.java:294) 
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:631) 
    at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:267) 
    at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:186) 
    at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:353) 
    at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:411) 
    at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:392) 

Я не понимаю, где пустая строка приходит из (который пытается преобразовать в целое), а также смущены ценности, которые он пытается вставить выше, за исключением:

property_industry_sector=property_industry_sector(1.0)={[, 0]}}] 

Я попробовал очистить строку до вызова put(). Возврат null, или так же, как в текущем примере возвращают строку с единственным значением 0.

ответ

1

Не нашли способ разобраться, но удалось решить проблему с помощью альтернативного решения. Вместо использования ScriptTransformer я смог достичь той же цели с преобразованиями SQL.

<entity name="industry_sector_hack" query=' 
    SELECT property_industry_sector AS property_industry_sector_ids 
    FROM job 
    WHERE id = ${job.id} AND 
      property_industry_sector IS NOT NULL AND 
      property_industry_sector &lt;&gt; "" 
    '> 
    <entity name="property_industry_sector" query=' 
     SELECT property.id AS property_industry_sector 
     FROM property 
     WHERE property.id IN (${industry_sector_hack.property_industry_sector_ids}) 
    '> 
    <field column="property_industry_sector" name="property_industry_sector" /> 
    </entity> 
</entity> 
Смежные вопросы