【问题标题】:solrj xml output in a filesolrj xml 输出到文件中
【发布时间】:2015-03-11 02:50:39
【问题描述】:

我在 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=[couldbealooooooooooooooooongvalue, andanotherone, andanotherone]muchMoreStuff...大约 20 - 可能与ID 到 ID}]"

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

非常感谢您的帮助。

最好的问候

【问题讨论】:

    标签: xml solr solrj


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我添加了这一行“server.setParser(new XMLResponseParser()); 所以如果我现在打印出 QueryResponse 对象,我会在线程中得到与 postet 相同的数据,但仅在 1 行中......
    • @parvin 如果您使用 SolrJ,则默认格式为 javabin。您可以通过 wt 参数更改它,但查询响应已经包含从响应本身获取的 java 对象。我不认为有一种开箱即用的方法可以使用 SolrJ 获取原始 xml 响应。
    • @javanna 我不是说在写http请求的时候发送solrj请求。我的意思是在不使用 solrj 的情况下发送 http 请求。
    • 我明白了,我完全同意。我很困惑,因为问题包含使用 SolrJ 的代码。
    • 这是我的错,我不知道您对 http 客户端的确切含义。我很抱歉。非常感谢您的大力帮助!
    【解决方案2】:

    有一种方法可以从 solrj 回复中获得清晰的 XML 格式,只需使用 solrj 方法。相关的方法是来自http://lucene.apache.org/solr/5_0_0/solr-solrj/org/apache/solr/client/solrj/util/ClientUtils.html的toXML(获取字符串)或writeXML(写入文件)方法

    例如,仅打印您可以执行的 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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多