2017-12-14 19 views
0

SOLR dataimporthandlersは、JDBCデータソースの親と子のプロパティを提供します。 URLdatasourceの親子関係を追加する方法。 私のサンプルデータセット:URLdatasourceのdataimporthandlerのSOLR子ドキュメント定義

<name>ABC</name> 
<createdAt>1512016450886</createdAt> 
<createdBy>XYZ</createdBy> 
<attributes> 
    <attribute> 
     <name>access</name> 
     <value>public</value> 
    </attribute> 
    <attribute> 
     <name>owner</name> 
     <value>ABC</value> 
    </attribute> 
    <attribute> 
     <name>url</name> 
     <value>planning</value> 
    </attribute> 
</attributes> 

し、必要なインデックス付きデータ出力:

{ 
    "name": "ABC", 
    "createdAt": "1512016450886", 
    "createdBy": "XYZ", 
    "Attributes": [ 
    { 
     "name": "access", 
     "value": "public" 
    }, 
    { 
     "name": "owner", 
     "value": "ABC" 
    }, 
    { 
     "name": "url", 
     "value": "planning" 
    } 
    ] 
} 

サンプルデータの設定:

<dataConfig> 
    <dataSource type="URLDataSource"/> 
    <document> 
    <entity name="sample" 
      url="http://host:port/api/sample_api.xml" 
      processor="XPathEntityProcessor" 
      forEach="/hash/name"> 
     <field column="id" name="id" xpath="/hash/name"/> 
     <field column="createdBy" name="createdBy" xpath="/hash/createdBy"/> 
     <field column="createdAt" name="createdAt" xpath="/hash/createdAt"/> 
     <field column="attributes" name="attributes" xpath="/hash/attributes"/> 
     <field column="attributes.name" name="attributes.name" xpath="/hash/attributes/attribute/name"/> 
     <field column="attributes.value" name="attributes.value" xpath="/hash/attributes/attribute/value"/> 
    </entity> 
    </document> 
</dataConfig> 

応答は次のとおりです。

{ "名": "ABC" 、 "createdAt": "1512016450886"、 "cr 「public」、「ABC」、「planning」]

「属性」:「属性」:「アクセス」、「所有者」、「URL」」 「attributes.value」:

私は、この新しいデータ-config.xmlのを試してみました:

<dataConfig> 
    <script> 
    <![CDATA[ id = 1; 
    function f1(row) { row.put('attr.attrId', (id ++).toFixed()); return row; } ]]> 
    </script> 
     <dataSource type="URLDataSource"/> 
     <document> 
     <entity name="entity" 
       url="http://abc:9090/api/sample_api.xml" 
       processor="XPathEntityProcessor" 
       forEach="/hash/entity/entity"> 
     <field column="id" name="id" xpath="/hash/entity/entity/name"/> 
      <field column="createdBy" name="createdBy" xpath="/hash/entity/entity/createdBy"/> 
       <entity name="attributes" 
       url="http://abc:9090/api/sample_api.xml" 
       child="true" 
       processor="XPathEntityProcessor" 
       forEach="/hash/entity/entity/xyz/xyz" transformer="script:f1"> 
      <field column="attr.attrId" name="attr.attrId"/> 
      <field column="attr.attrName" name="attr.attrName" xpath="/hash/entity/entity/xyz/xyz/name"/> 
      <field column="attr.attrValue" name="attr.attrValue" xpath="/hash/entity/entity/xyz/xyz/value"/> 
      </entity> 
      </entity> 
     </document> 
    </dataConfig> 

しかし、イムsolr.log

[ x:xml_data] o.a.s.h.d.SolrWriter Error creating document : SolrInputDocument(fields: [createdBy=XYZ, id=ABC, _version_=1587094252791267328, _root_=ABC], children: [SolrInputDocument(fields: [attr.attrName=access, attr.attrId=1, attr.attrValue=public, _root_=ABC, _version_=1587094252791267328]), SolrInputDocument(fields: [attr.attrName=access12, attr.attrId=2, attr.attrValue=public12, _root_=ABC, _version_=1587094252791267328])]) 
org.apache.solr.common.SolrException: [doc=null] missing required field: id 
    at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:265) 
    at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:107) 
    at org.apache.solr.update.AddUpdateCommand$1.next(AddUpdateCommand.java:212) 
    at org.apache.solr.update.AddUpdateCommand$1.next(AddUpdateCommand.java:185) 
    at org.apache.lucene.index.DocumentsWriterPerThread.updateDocuments(DocumentsWriterPerThread.java:259) 
    at org.apache.lucene.index.DocumentsWriter.updateDocuments(DocumentsWriter.java:433) 
    at org.apache.lucene.index.IndexWriter.updateDocuments(IndexWriter.java:1384) 
    at org.apache.solr.update.DirectUpdateHandler2.updateDocument(DirectUpdateHandler2.java:920) 
    at org.apache.solr.update.DirectUpdateHandler2.updateDocOrDocValues(DirectUpdateHandler2.java:913) 
    at org.apache.solr.update.DirectUpdateHandler2.doNormalUpdate(DirectUpdateHandler2.java:302) 
    at org.apache.solr.update.DirectUpdateHandler2.addDoc0(DirectUpdateHandler2.java:239) 
    at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:194) 
    at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:67) 
    at org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55) 
    at org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalAdd(DistributedUpdateProcessor.java:979) 
    at org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:1192) 
    at org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:748) 
    at org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:103) 
    at org.apache.solr.handler.dataimport.SolrWriter.upload(SolrWriter.java:80) 
    at org.apache.solr.handler.dataimport.DataImportHandler$1.upload(DataImportHandler.java:254) 
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:526) 
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414) 
    at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329) 
    at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232) 
    at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:415) 
    at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:474) 
    at org.apache.solr.handler.dataimport.DataImporter.lambda$runAsync$0(DataImporter.java:457) 
    at java.lang.Thread.run(Thread.java:748) 
+0

ので、あなたは何をしようとしたのですか?あなたのデータ設定は何ですか? – Mysterion

+0

質問の本文にデータ設定を追加してください – Mysterion

+0

私はこのオプションも試しました。 ..これは何も返しません。 – Triveni

答えて

0

に、次のエラーを取得し、実際にそれを行うのは非常に簡単です。 child="true"

これは、データ-config.xmlのが見てどのように更新されるためのサポートがあります:

<dataConfig> 
<dataSource type="URLDataSource" encoding="utf-8" /> 
<document> 
    <entity name="entity" 
      url="path:to:xml" 
      processor="XPathEntityProcessor" 
      forEach="/hash/entity"> 
    <field column="id" name="id" xpath="/hash/entity/name" /> 
    <field column="createdBy" name="createdBy" xpath="/hash/entity/createdBy" /> 
    <field column="createdAt" name="createdAt" xpath="/hash/entity/createdAt" /> 
    <entity name="attributes" 
      url="path:to:xml" 
      child="true" processor="XPathEntityProcessor" forEach="/hash/entity/attributes/attribute"> 
     <field column="name" xpath="/hash/entity/attributes/attribute/name" /> 
     <field column="value" xpath="/hash/entity/attributes/attribute/value" /> 
    </entity> 
    </entity> 
</document> 
</dataConfig> 

あなたに比べて行われていた何を:あなたは、子文書を作成したい場合は、あなたがして、ネストされたエンティティを作成する必要がありますchild="true"。また、データと同じプロセッサへのパスを指定する必要もあります。また、xpathのいくつかは正しくありませんでした。 XMLが適切に(以前に、あなたは1個のルートタグを持っていなかったが、そのうちのいくつかではなく)にフォーマットする必要があります

アピ:

<hash> 
    <entity> 
    <name>ABC</name> 
    <createdAt>1512016450886</createdAt> 
    <createdBy>XYZ</createdBy> 
    <attributes> 
     <attribute> 
     <name>access</name> 
     <value>public</value> 
     </attribute> 
     <attribute> 
     <name>owner</name> 
     <value>ABC</value> 
     </attribute> 
     <attribute> 
     <name>url</name> 
     <value>planning</value> 
     </attribute> 
    </attributes> 
    </entity> 
</hash> 
関連する問題