A side note that might help: if I change the dataField from 'db.blob' to 'blob', this DIH stack emits no documents.
On 10/5/09, Lance Norskog <goks...@gmail.com> wrote: > I've added a unit test for the problem down below. It feeds document > field data into the XPathEntityProcessor via the > FieldReaderDataSource, and the XPath EP does not emit unpacked fields. > > Running this under the debugger, I can see the supplied StringReader, > with the XML string, being piped into the XPath EP. But somehow the > XPath EP does not pick it apart the right way. > > Here is the DIH configuration file separately. > > <dataConfig> > <dataSource type='FieldReaderDataSource' name='fc' /> > <dataSource type='MockDataSource' name='db' /> > <document> > <entity name='db' query='select * from x' dataSource='db'> > <field column='dbid' /> > <field column='tag' /> > <field column='blob' /> > <entity name='unpack' dataSource='fc' > processor='XPathEntityProcessor' > forEach='/names' dataField='db.blob'> > <field column='name' xpath='/names/name' /> > </entity> > </entity> > </document> > </dataConfig> > > Any ideas? > > --------------------------------------------------------------------------------------- > > package org.apache.solr.handler.dataimport; > > import static > org.apache.solr.handler.dataimport.AbstractDataImportHandlerTest.createMap; > import junit.framework.TestCase; > > import java.util.ArrayList; > import java.util.HashMap; > import java.util.List; > import java.util.Map; > > import org.apache.solr.common.SolrInputDocument; > import org.apache.solr.common.SolrInputField; > import org.apache.solr.handler.dataimport.TestDocBuilder.SolrWriterImpl; > import org.junit.Test; > > /* > * Demonstrate problem feeding XPathEntity from a FieldReaderDatasource > */ > > public class TestFieldReaderXPath extends TestCase { > static final String KISSINGER = "<names><name>Henry</name></names>"; > > static final String[][][] DBDOCS = { > {{"dbid", "1"}, {"blob", KISSINGER}}, > }; > > /* > * Receive a row from SQL and fetch a row from Solr - no value matching > * stolen from TestDocBuilder > * */ > > @Test > public void testSolrEmbedded() throws Exception { > try { > DataImporter di = new DataImporter(); > di.loadDataConfig(dih_config_FR_into_XP); > DataImporter.RequestParams rp = new > DataImporter.RequestParams(); > rp.command = "full-import"; > rp.requestParams = new HashMap<String, Object>(); > > DataConfig cfg = di.getConfig(); > DataConfig.Entity entity = cfg.document.entities.get(0); > List<Map<String,Object>> l = new > ArrayList<Map<String,Object>>(); > addDBDocuments(l); > MockDataSource.setIterator("select * from x", > l.iterator()); > entity.dataSrc = new MockDataSource(); > entity.isDocRoot = true; > SolrWriterImpl swi = new SolrWriterImpl(); > di.runCmd(rp, swi); > > assertEquals(1, swi.docs.size()); > SolrInputDocument doc = swi.docs.get(0); > SolrInputField field; > field = doc.getField("dbid"); > assertEquals(field.getValue().toString(), "1"); > field = doc.getField("blob"); > assertEquals(field.getValue().toString(), KISSINGER); > field = doc.getField("name"); > assertNotNull(field); > assertEquals(field.getValue().toString(), "Henry"); > } finally { > MockDataSource.clearCache(); > } > } > > > private void addDBDocuments(List<Map<String, Object>> l) { > for(String[][] dbdoc: DBDOCS) { > l.add(createMap(dbdoc[0][0], dbdoc[0][1], dbdoc[1][0], > dbdoc[1][1])); > } > } > > String dih_config_FR_into_XP = "<dataConfig>\r\n" + > " <dataSource type='FieldReaderDataSource' name='fc' />\r\n" + > " <dataSource type='MockDataSource' name='db' />\r\n" + > " <document>\r\n" + > " <entity name='db' query='select * from x' dataSource='db'>\r\n" > + > " <field column='dbid' />\r\n" + > " <field column='tag' />\r\n" + > " <field column='blob' />\r\n" + > " <entity name='unpack' dataSource='fc' > processor='XPathEntityProcessor'\r\n" + > " forEach='/names' dataField='db.blob'>\r\n" + > " <field column='name' xpath='/names/name' />\r\n" + > " </entity>\r\n" + > " </entity>\r\n" + > " </document>\r\n" + > "</dataConfig>\r\n" > ; > > > } > -- Lance Norskog goks...@gmail.com