1

所以!这是我的第一个问题,所以请善待;)

我一直在使用 Solr,最近发现它几乎没有安全性。所以在浏览器中,您可以 http://HOST:PORT/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true 轻而易举地编写和删除我的索引。

阅读 Solr wiki 我编辑了我的 solrconfig.xml 文件,添加了我自己的 RequestHandler 以进行更新。

<requestHandler name="/theupdate" 
   class="solr.XmlUpdateRequestHandler">
</requestHandler>

..而不是默认的..

<requestHandler name="/update" 
   class="solr.XmlUpdateRequestHandler">
</requestHandler>

现在,在将文档集合添加到服务器时(在提交之前),我遇到了这个异常。

org.apache.solr.client.solrj.SolrServerException: Server at http://HOST:PORT/solr returned non ok status:400, message:Missing solr core name in path
  at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:328)
  at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:211)
  at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:105)
  at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:69)
  at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54)

这是我的索引代码:

SolrServer server = new HttpSolrServer("http://HOST:PORT/solr");
Collection<SolrInputDocument> colection = new ArrayList<SolrInputDocument>();
SolrInputDocument solrDoc = new SolrInputDocument();
OracleCachedRowSet rsX = getDataFromDB(); // not actual line
while (rsX.next()) {
  solrDoc.addField("id", rsX.getLong(1), 1.0f);
  solrDoc.addField("name", rsX.getString(2), 1.0f);
  colection.add(solrDoc);
}
server.add(colection); //<-- the exception is thrown here!
server.commit();
colection.clear();

注意:我读过一些关于通过防火墙保护 Solr 和/或我正在处理的 servlet 容器中的基本身份验证的内容......

提前致谢!

4

1 回答 1

0

我一直在查看 HttpSolrServer 上可用的方法以及 SolrJ 库中SolrServer上的各种add方法,不幸的是,我没有看到任何地方可以在 SolrJ 中为 updateHandler 覆盖或指定不同的名称。它假定它将通过http://HOST:PORT/solr/update

于 2012-10-26T11:56:21.757 回答