1

TomCat-Servlet に Solr サーバーをセットアップしました。私のインデックスには、いくつかのフィールドを持つ約 610.000 ドキュメントがあります。私のschema.xml:

<field name="ID" type="myText" indexed="true" stored="true" required="true" />
<field name="text" type="myText" indexed="true" stored="false" multiValued="true" />
<dynamicField name="AT*" type="text_general" indexed="true" stored="true" multiValued="true" />

特定の文字列 (別のシステムからのものである可能性があります) でインデックスを検索するには、小さな JavaProgram を作成しました

class SolrjTest
{
public static void main(String[] args) throws IOException
{
SolrjTest solrj = new SolrjTest();
solrj.query(args[0]);
}
public void query(String q) throws IOException
{
CommonsHttpSolrServer server = null;
String uuid = null;
boolean flag = true;
while(flag==true)
{   
uuid = UUID.randomUUID().toString();
File f = new File("E:/dw-solr/tomcat-solr/bin/solr/data/SearchResult/"+uuid+".txt");
if(!f.exists()){
flag = false;
}
}
try
{
server = new CommonsHttpSolrServer("http://localhost:8080/solr");
}
catch(Exception e)
{
e.printStackTrace();
}
SolrQuery query = new SolrQuery();
query.setQuery(q);
FileWriter fw = new FileWriter("E:/dw-solr/tomcat-solr/bin/solr/data/SearchResult/"+uuid+".txt");
try
{
QueryResponse qr = server.query(query);
SolrDocumentList sdl = qr.getResults();

Object[] o = new Object[sdl.size()];
o = sdl.toArray();
for (int i = 0; i < o.length; i++) {
System.out.println(o[i].toString());
fw.write(o[i].toString() + "\n");
}
fw.flush();
fw.close();
System.out.println("finished");
}
catch (SolrServerException e)
{
e.printStackTrace();
}
}

そして結果はファイルに保存されます。問題は、データの形式が非常に奇妙であることです。次のようになります。

"SolrDocument[{ID=0000000, AT_anyName=[anyValue, multiValue, justMoreValue], AT_anyName2=[Normal,Normal, Normal], AT_mightbeanothername=[couldbealoooooooooooooooongvalue, andanotherone, andanotherone]muchMoreStuff... 約 20 - ID ごとに異なる場合があります}]"

私が望んでいるのは、このデータの明確な XML 形式です。そのため、それを XML ファイルとして保存し、他のシステムに送り返します。問題は、メソッド SolrDocumentList sdl = qr.getResults(); です。上記のように結果を返します。前に投稿したように、私は dynamicFields を持っているので、物事は本当に複雑になります (少なくとも私にとっては :-/ )。フォーマットをプレーンでクリアな XML フォーマットに変更する方法はありますか?

助けてくれてありがとう。

よろしくお願いします

4

2 に答える 2

2

Response Writers is used to generate different formats of the search responses.By default it returns the XML response. By sending the HTTP request you can get response in xml format.

于 2012-07-20T12:53:23.527 に答える
1

solrj メソッドを使用するだけで、solrj 応答から明確な XML 形式を取得する方法があります。関連するメソッドは、http://lucene.apache.org/solr/5_0_0/solr-solrj/org/apache/solr/client/solrj/ のtoXML (文字列を取得する) または writeXML (ファイルに書き込む) メソッドです。ユーティリティ/ClientUtils.html

たとえば、XML を印刷するには、次のようにします。

    QueryResponse qr = solrclient.query(query);
    SolrDocumentList results = qr.getResults();

    for (int i = 0; i < results.size(); i++) {
        String xml = ClientUtils.toXML(ClientUtils.toSolrInputDocument(results.get(i)));
        System.out.println(xml);
    }
于 2015-03-10T18:50:39.053 に答える