2012-01-13 14 views
3

私はJavaを知らない、私はXMLを知らないし、Luceneも知らない。今はそれが途方もないことです。私はapache solr/luceneを使って小さなプロジェクトを作成しようとしています。私の問題は、XMLファイルのインデックスを作成できないことです。どのように動作するのか分かりましたが、間違っている可能性があります。私はあなたのためにどのような情報が必要なのか分かりませんので、コードを投稿します。DataImportHandlerを使用してSolrへのXMLファイルのインデックス作成を手助けする必要があります

<dataConfig> 
<dataSource type="FileDataSource" encoding="UTF-8" /> 
<document> 
<!-- This first entity block will read all xml files in baseDir and feed it into the second entity block for handling. --> 
<entity name="AMMFdir" rootEntity="false" dataSource="null" 
     processor="FileListEntityProcessor" 
     fileName="^*\.xml$" recursive="true" 
     baseDir="C:\Documents and Settings\saperez\Desktop\Tomcat\apache-tomcat-7.0.23\webapps\solr\data\AMMF_New" 
     > 
<entity 
     processor="XPathEntityProcessor" 
     name="AMMF" 
     pk="AcquirerBID" 
     datasource="AMMFdir" 
     url="${AMMFdir.fileAbsolutePath}" 
     forEach="/AMMF/Merchants/Merchant/" 
     transformer="DateFormatTransformer, RegexTransformer" 
     > 

    <field column="AcquirerBID" xpath="/AMMF/Merchants/Merchant/AcquirerBID" /> 
    <field column="AcquirerName" xpath="/AMMF/Merchants/Merchant/AcquirerName" /> 
    <field column="AcquirerMerchantID" xpath="/AMMF/Merchants/Merchant/AcquirerMerchantID" /> 

</entity> 
</entity> 
</document> 

例xmlファイル

<?xml version="1.0" encoding="utf-8"?> 
<AMMF xmlns="http://tempuri.org/XMLSchema.xsd" Version="11.2" CreateDate="2011-11-07T17:05:14" ProcessorBINCIB="422443" ProcessorName="WorldPay" FileSequence="18"> 
<Merchants Count="153"> 
    <Merchant ChangeIndicator="A" LocationCountry="840"> 
    <AcquirerBID>10029881</AcquirerBID> 
    <AcquirerName>WorldPay</AcquirerName> 
    <AcquirerMerchantID>*</AcquirerMerchantID> 
    <Merchant ChangeIndicator="A" LocationCountry="840"> 
    <AcquirerBID>10029882</AcquirerBID> 
    <AcquirerName>WorldPay2</AcquirerName> 
    <AcquirerMerchantID>Hello World!</AcquirerMerchantID> 
</Merchant> 
</Merchants> 

私は、スキーマでこれを持っています。

<field name="AcquirerBID" type="string" indexed="true" stored="true" required="true" /> 
<field name="AcquirerName" type="string" indexed="true" stored="true" /> 
<field name="AcquirerMerchantID" type="string" indexed="true" stored="true"/> 

これは設定されています。

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler" default="true" > 
<lst name="defaults"> 
<str name="config">AMMFconfig.xml</str> 
</lst> 
</requestHandler> 

答えて

1

しばしば行うための最善のことは、DIHを使用しないです。あなたが知っている言語でAPIとカスタムスクリプトを使ってこのデータを投稿するのはどれくらい難しいでしょうか?

  1. あなたは、あなたのシステムについての詳細を学び、より良いそれを知っている:

    このアプローチの利点は二つあります。

  2. あなたはDIHを理解するのに時間を費やす必要はありません。

欠点は、ホイールを少し発明し直していることですが、DIHは理解するのが大変です。

+0

これらは、まったく役に立たない場合は、有効な質問です。私はコードを書いていません... –

+2

私はコーディングがSolrの要件だと思います。私は、あなたのツールキットで少なくとも1つの言語がなくても、たくさんのことをすることができるとは想像できません。 – mlissner

2

サンプルXMLが正しく構成されていません。これは、ファイルのインデックスを作成、エラーを説明するかもしれない:

$ xmllint sample.xml 
sample.xml:13: parser error : expected '>' 
</Merchants> 
     ^
sample.xml:14: parser error : Premature end of data in tag Merchants line 3 
sample.xml:14: parser error : Premature end of data in tag AMMF line 2 

修正しましXML

は、ここで私はあなたのサンプルデータが(XSDファイルをチェックしませんでした)

<?xml version="1.0" encoding="utf-8"?> 
<AMMF xmlns="http://tempuri.org/XMLSchema.xsd" Version="11.2" CreateDate="2011-11-07T17:05:14" ProcessorBINCIB="422443" ProcessorName="WorldPay" FileSequence="18"> 
    <Merchants Count="153"> 
    <Merchant ChangeIndicator="A" LocationCountry="840"> 
     <AcquirerBID>10029881</AcquirerBID> 
     <AcquirerName>WorldPay</AcquirerName> 
     <AcquirerMerchantID>*</AcquirerMerchantID> 
    </Merchant> 
    <Merchant ChangeIndicator="A" LocationCountry="840"> 
     <AcquirerBID>10029882</AcquirerBID> 
     <AcquirerName>WorldPay2</AcquirerName> 
     <AcquirerMerchantID>Hello World!</AcquirerMerchantID> 
    </Merchant> 
    </Merchants> 
</AMMF> 

代替ソリューションのようになるはずだと思うものだ

あなたはプログラマーではないとお知りになりましたが、solrjインターフェイスを使用すると、この作業ははるかに簡単です。

以下は、どのインデックスあなたの例XML

// 
// Dependencies 
// ============ 
import org.apache.solr.client.solrj.SolrServer 
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer 
import org.apache.solr.common.SolrInputDocument 

@Grapes([ 
    @Grab(group='org.apache.solr', module='solr-solrj', version='3.5.0'), 
]) 

// 
// Main 
// ===== 

SolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr/"); 
def i = 1 

new File(".").eachFileMatch(~/.*\.xml/) { 

    it.withReader { reader -> 
     def ammf = new XmlSlurper().parse(reader) 

     ammf.Merchants.Merchant.each { merchant -> 
      SolrInputDocument doc = new SolrInputDocument(); 

      doc.addField("id",   i++) 
      doc.addField("bid_s",  merchant.AcquirerBID) 
      doc.addField("name_s",  merchant.AcquirerName) 
      doc.addField("merchantId_s", merchant.AcquirerMerchantID) 

      server.add(doc) 
     } 
    } 

} 

server.commit() 

Groovyのコンパイルを必要としないのJavaスクリプト言語であるGroovyの一例です。 DIH設定ファイルと同じように管理するのも簡単です。

1

DIH XMLのインポートがどのように機能するかを理解するために、まずDIH wikiのこの章をよくお読みください。http://wiki.apache.org/solr/DataImportHandler#HttpDataSource_Example

ブラウザでSlashdotのリンクhttp://rss.slashdot.org/Slashdot/slashdotを開き、ページを右クリックして[ソースを表示]を選択します。この例で使用されるXMLファイルがあります。 DIHの例のXPathEntityProcessor設定と比較すると、SolrのXMLファイルを簡単にインポートできることがわかります。

もっとお手伝いが必要な場合は、お問い合わせください。

関連する問題