我的意图是使用POJO更新solr。我正在尝试使用solrServer和addBean
方法更新字段(id)。
程序正在正确执行,但我无法在solr中看到我的更新。请告诉我代码中可能有什么错误。我还尝试使用SolrInputDocument
添加字段,它运行良好(代码片段中有注释的代码)。如果你能提供一个关于直接向solr添加POJO的答案,这将对我很有帮助。这是代码:
import org.apache.solr.client.solrj.beans.Field;
public class Item {
@Field
String id;
}
package stockjournalist;
import java.io.IOException;
import org.json.simple.JSONObject;
import org.apache.solr.*;
import org.apache.solr.client.solrj.request.DirectXmlRequest;
import org.apache.solr.client.solrj.request.LukeRequest;
import org.apache.solr.client.solrj.request.SolrPing;
import org.apache.solr.client.solrj.response.LukeResponse;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.util.XML;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.impl.*;
import org.apache.solr.client.solrj.beans.Field;
public class JsonSample {
public static void main(String args[]) throws IOException, SolrServerException{
JsonSample js = new JsonSample();
js.insertOneDoc();
}
private SolrServer getSolrServer(){
String server = "http://localhost:8983/solr";
SolrServer solrServer = null;
solrServer = new HttpSolrServer(server);
return solrServer;
}
public void insertOneDoc() throws SolrServerException, IOException {
Item item = new Item();
item.id = "5137158701";
SolrServer server = getSolrServer();
server.addBean(item);
server.commit();
//String urlString = "http://localhost:8983/solr";
//HttpSolrServer solr = new HttpSolrServer(urlString);
//SolrInputDocument doc = new SolrInputDocument();
//doc.addField("id", "552199");
//doc.addField("name", "See if 513715870 is available in the index.");
//solr.add(doc);
//solr.commit();
}
}
感谢
请你
- 检查您的solrj版本和solr版本。必须是一样的
-
打印更新的返回:org.apache.solr.client.solrj.response.从SolrServer更新响应,并在此处通过响应以帮助您。
public void insertOneDoc() throws SolrServerException, IOException { Item item = new Item(); item.id = "5137158701"; SolrServer server = getSolrServer(); //DEBUG UpdateResponse resp= server.addBean(item); System.out.println("SolrResponse:"+ r.getStatus() + r.getElapsedTime()); for( Entry<String, Object> o: r.getResponse()){ System.out.println("SolrResponse - response :"+ o.getKey() + o.getValue().toString()); } server.commit();
}
-
查看solr管理中的日志http://localhost:8983/solr/#/~记录
- 共享schema.xml,solrconfig.xml
虽然这篇文章很旧,但我在有同样需求的时候遇到了它。
因此,值得一提的是,由于没有updateBean()
方法,并且索引中有现有文档的id,您可以首先通过向deleteById
方法提供其id来删除现有文档,然后像往常一样通过addBean
方法添加bean:
solrClient.deleteById(item.id);
solrClient.addBean(item);
请注意:HttpSolrServer已被弃用,取而代之的是HttpSolrClient