先上代码
public class SolrTest {
public static final String SOLR_URL="http://localhost:8080/solr/core";
private SolrServer solr=null;
@Test
public void getSolrTest() throws Exception{
String fileName = "D:\\projects\\solr\\home\\docs\\solr-word.pdf";
String solrId = "solr-word.pdf";
solr = new HttpSolrServer(SOLR_URL);
ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");
String contentType="application/pdf";
up.addFile(new File(fileName), contentType);
up.setParam("literal.id", solrId);
up.setParam("uprefix", "attr_");
up.setParam("fmap.content", "attr_content");
up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
solr.request(up);
QueryResponse rsp = solr.query(new SolrQuery("*:*"));
System.out.println(rsp);
}
}
测试运行,随之问题来了。
BUG_1:
org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: java.lang.NoClassDefFoundError: org/apache/xml/serialize/BaseMarkupSerializer
at org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:552)
at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210)
at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206)
问题:缺少解析xml格式文件的jar包
解决方案:下载解析jar包放入solr项目下的lib文件夹,下载地址http://xerces.apache.org/mirrors.cgi,将下载文件中的 xercesImpl.jar与xml-apis.jar放入lib文件夹。
BUG_2:
[doc=solr-word.pdf] missing required field: filePath
问题:schema.xml文件中多出无法解析的字段filePath
解决方法:删掉filePath的field字段即可
把两个错误搞定后,pdf与doc文件都可以被成功解析索引。
schema.xml和solrconfig.xml就不贴出来了,很容易找到可以参考的。