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=[couldbealoooooooooooooooooongvalue, andanotherone, andanotherone]muchMoreStuff...大约 20 - 可能因 ID 不同而不同}]"

我想要的是这个数据的清晰的 XML 格式。所以我将它保存为 XML 文件并将其发送回另一个系统。问题是,方法 SolrDocumentList sdl = qr.getResults(); 返回如上所示的结果。正如我之前发布的那样,我有动态字段,所以事情变得非常复杂(至少对我来说:-/)。有什么解决方案,如何将格式更改为简单、清晰的 XML 格式?

非常感谢您的帮助。

最好的祝福

4

2 回答 2

2

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

于 2012-07-20T12:53:23.527 回答
1

有一种方法可以从 solrj 回复中获得清晰的 XML 格式,只需使用 solrj 方法。相关方法是来自http://lucene.apache.org/solr/5_0_0/solr-solrj/org/apache/solr/client/solrj/的 toXML(获取字符串)或 writeXML(写入文件)方法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);
    }
于 2015-03-10T18:50:39.053 回答