2012-07-20 32 views
1

我在TomCat-Servlet上设置Solr服务器。在我的索引中,大约有610.000个文档包含多个字段。我的schema.xml:solrj 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,多值,justMoreValue],AT_anyName2 = [标准,标准,标准],AT_mightbeanothername = [couldbealoooooooooooooooongvalue,andanotherone,andanotherone] muchMoreStuff ...约20 - 可以不同于ID到ID}]“

我想要的是一个明确的XML格式的数据。所以我将它保存为XML文件并将其发送回其他系统。问题是,方法SolrDocumentList sdl = qr.getResults();返回如上所示的结果。正如我之前发布的,我有dynamicFields,所以东西变得非常复杂(至少对我来说: - /)。 有没有解决方案,我可以如何将格式更改为简单明了的XML格式?

非常感谢您的帮助。

问候

回答

2

Response Writers用于生成搜索不同格式responses.By默认情况下它返回的XML响应。通过发送HTTP请求,您可以获得xml格式的响应。

+0

感谢您的答复。我添加了这一行“server.setParser(new XMLResponseParser());因此,如果我现在打印出QueryResponse对象,我会得到相同的数据,如线程中的postet,但只有一行... – 2012-07-20 13:02:32

+0

@parvin如果使用SolrJ默认的格式是javabin,你可以通过wt参数来改变它,但是查询响应已经包含了从响应本身获得的java对象,我认为用SolrJ得到原始的xml响应并不是一种开箱即用的方式。 – javanna 2012-07-20 14:04:05

+0

@javanna我写的http请求并不意味着发送solrj请求,我的意思是在不使用solrj的情况下发送http请求。 – 2012-07-20 14:35:19

1

有一种方法可以通过solrj方法从solrj回复中获得清晰的XML格式。相关的方法是toxml用于(得到一个字符串)或中WriteXML(写入文件)从http://lucene.apache.org/solr/5_0_0/solr-solrj/org/apache/solr/client/solrj/util/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); 
    }