[ https://issues.apache.org/jira/browse/SOLR-2094?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15608212#comment-15608212 ]
Noble Paul commented on SOLR-2094: ---------------------------------- Diagnosis: {{XPathRecordReader}} objects are cached and reused between XMLs. It's OK as long as the xpaths themselves don't have any variables. If the xpath has a variable such as {code} xpath="/tissue-samples/tissue[@fma-id='${Sequence.sampleTissueCode}']/parent-path" {code} then it needs to be recreated before starting with each XML file. Solutions: # make {{XPathRecordReader}} aware of the templates and recompute them before each XML # If templates are present in {{xpath}} or {{forEach}} , discard the {{XPathRecordReader}} instance before every XML For sake of simplicity I would recommend #2 > When using a XPathEntityProcessor nested within a SQLEntityProcessor, the > xpathReader isn't reinitilized for each new document > ------------------------------------------------------------------------------------------------------------------------------- > > Key: SOLR-2094 > URL: https://issues.apache.org/jira/browse/SOLR-2094 > Project: Solr > Issue Type: Bug > Components: contrib - DataImportHandler > Affects Versions: 1.4.1 > Environment: Solr 1.4 > Reporter: Niall O'Connor > Assignee: Alexandre Rafalovitch > Attachments: SOLR-2094.patch > > > I have a dih config with a SqlEntityProcessor that retrives a table. I then > have a sub-entity with the XPathEntityProcessor type, this takes a value from > the table as input to parse through an xml doc. > I find that the first document is created correctly, but then the xpathReader > of the XPathEntityProcessor does not reinitialize for the following documents > so the initial documents input is used. > {code:xml} > <dataSource name="hivseqdb" driver="com.mysql.jdbc.Driver" > url="l" > user="hivseqdb" password="hivseqdb" batchSize="1"/> > > <dataSource name="xmlFile" type="FileDataSource" /> > > <document><entity name="Sequence" dataSource="hivseqdb" pk="se_id" > query="SELECT * FROM hivseqdb.sequenceentry where se_id != '1'"> > > <entity name="FMA_Tissue_Hierarchy" > dataSource="xmlFile" > pk="fma-id" > forEach="/tissue-samples" > processor="XPathEntityProcessor" > > url="/opt/hivseqdb/solr/conf/sub_ontology_translated.xml" > stream="true"> > <field column="tissue-antology-parent-path" > xpath="/tissue-samples/tissue[@fma-id='${Sequence.sampleTissueCode}']/parent-path"/> > </entity> > {code} > DocBuilder dose call init on the XPathEntityProcessor but there is a > conditional in the init method to check if the xpathReader is null: > {code:java} > public void init(Context context) { > super.init(context); > if (xpathReader == null) > initXpathReader(); > pk = context.getEntityAttribute("pk"); > dataSource = context.getDataSource(); > rowIterator = null; > } > {code} > So the xPathReader is used again and again. Is there away to reinitialize the > xPathReader for every document? Or what is the specific design reason for > preserving it? > > -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org