我在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格式?
非常感谢您的帮助。
问候
感谢您的答复。我添加了这一行“server.setParser(new XMLResponseParser());因此,如果我现在打印出QueryResponse对象,我会得到相同的数据,如线程中的postet,但只有一行... – 2012-07-20 13:02:32
@parvin如果使用SolrJ默认的格式是javabin,你可以通过wt参数来改变它,但是查询响应已经包含了从响应本身获得的java对象,我认为用SolrJ得到原始的xml响应并不是一种开箱即用的方式。 – javanna 2012-07-20 14:04:05
@javanna我写的http请求并不意味着发送solrj请求,我的意思是在不使用solrj的情况下发送http请求。 – 2012-07-20 14:35:19