Lucene 如何更新文档而不丢失字段? CommonHttpSolrServer服务器=新的CommonHttpSolrServer(“http://localhost:8983/solr/"); SolrInputDocument doc1=新的SolrInputDocument(); doc1.添加字段(“id”、“id1”); doc1.添加字段(“名称”、“doc1”); doc1.addField(“价格”,新浮动(10)); SolrInputDocument doc2=新的SolrInputDocument(); doc2.添加字段(“id”、“id1”); doc2.添加字段(“名称”、“doc2”); server.add(doc1); server.add(doc2); commit(); SolrQuery query=新的SolrQuery(); setQuery(“id:id1”); query.addSortField(“price”,SolrQuery.ORDER.desc); QueryResponse rsp=server.query(查询); 迭代器iter=rsp.getResults().Iterator(); while(iter.hasNext()){ SolrDocument doc=iter.next(); 集合字段名=doc.getFieldNames(); 迭代器fieldIter=fieldNames.Iterator(); StringBuffer内容=新的StringBuffer(“”); while(fieldIter.hasNext()){ 字符串字段=fieldIter.next(); content.append(field+”:“+doc.get(field)).append(“”); //系统输出打印项次(字段); } 系统输出打印项次(内容); }
问题是我想得到结果“id:id1 name:doc2 price:10.0”,但输出是“id:id1 name:doc2”。。。Lucene 如何更新文档而不丢失字段? CommonHttpSolrServer服务器=新的CommonHttpSolrServer(“http://localhost:8983/solr/"); SolrInputDocument doc1=新的SolrInputDocument(); doc1.添加字段(“id”、“id1”); doc1.添加字段(“名称”、“doc1”); doc1.addField(“价格”,新浮动(10)); SolrInputDocument doc2=新的SolrInputDocument(); doc2.添加字段(“id”、“id1”); doc2.添加字段(“名称”、“doc2”); server.add(doc1); server.add(doc2); commit(); SolrQuery query=新的SolrQuery(); setQuery(“id:id1”); query.addSortField(“price”,SolrQuery.ORDER.desc); QueryResponse rsp=server.query(查询); 迭代器iter=rsp.getResults().Iterator(); while(iter.hasNext()){ SolrDocument doc=iter.next(); 集合字段名=doc.getFieldNames(); 迭代器fieldIter=fieldNames.Iterator(); StringBuffer内容=新的StringBuffer(“”); while(fieldIter.hasNext()){ 字符串字段=fieldIter.next(); content.append(field+”:“+doc.get(field)).append(“”); //系统输出打印项次(字段); } 系统输出打印项次(内容); },lucene,solr,Lucene,Solr,问题是我想得到结果“id:id1 name:doc2 price:10.0”,但输出是“id:id1 name:doc2”。。。 因此,我想知道如果我想得到“id:id1 name:doc2 price:10.0”的结果,我如何修改我的编程?当您添加具有相同id的文档时。您基本上添加了两次相同的文档。 Solr将更新/覆盖文档。更新基本上是删除和添加 由于使用相同id添加的第二个文档没有price字段,因此不会添加该文档,也不会在索引中找到它 在添加回文档时,您需要更改和更改所有字段 Commo
因此,我想知道如果我想得到“id:id1 name:doc2 price:10.0”的结果,我如何修改我的编程?当您添加具有相同id的文档时。您基本上添加了两次相同的文档。 Solr将更新/覆盖文档。更新基本上是删除和添加 由于使用相同id添加的第二个文档没有price字段,因此不会添加该文档,也不会在索引中找到它 在添加回文档时,您需要更改和更改所有字段
CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr/");
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField("id", "id1");
doc1.addField("name", "doc1");
doc1.addField("price", new Float(10));
SolrInputDocument doc2 = new SolrInputDocument();
doc2.addField("id", "id1");
doc2.addField("name", "doc2");
server.add(doc1);
server.add(doc2);
server.commit();
SolrQuery query = new SolrQuery();
query.setQuery("id:id1");
query.addSortField("price", SolrQuery.ORDER.desc);
QueryResponse rsp = server.query(query);
Iterator<SolrDocument> iter = rsp.getResults().iterator();
while(iter.hasNext()){
SolrDocument doc = iter.next();
Collection fieldNames = doc.getFieldNames();
Iterator<String> fieldIter = fieldNames.iterator();
StringBuffer content = new StringBuffer("");
while(fieldIter.hasNext()){
String field = fieldIter.next();
content.append(field+":"+doc.get(field)).append(" ");
//System.out.println(field);
}
System.out.println(content);
}
当您添加具有相同id的文档时,您基本上添加了两次相同的文档。 Solr将更新/覆盖文档。更新基本上是删除和添加 由于使用相同id添加的第二个文档没有price字段,因此不会添加该文档,也不会在索引中找到它 在添加回文档时,您需要更改和更改所有字段
CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr/");
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField("id", "id1");
doc1.addField("name", "doc1");
doc1.addField("price", new Float(10));
SolrInputDocument doc2 = new SolrInputDocument();
doc2.addField("id", "id1");
doc2.addField("name", "doc2");
server.add(doc1);
server.add(doc2);
server.commit();
SolrQuery query = new SolrQuery();
query.setQuery("id:id1");
query.addSortField("price", SolrQuery.ORDER.desc);
QueryResponse rsp = server.query(query);
Iterator<SolrDocument> iter = rsp.getResults().iterator();
while(iter.hasNext()){
SolrDocument doc = iter.next();
Collection fieldNames = doc.getFieldNames();
Iterator<String> fieldIter = fieldNames.iterator();
StringBuffer content = new StringBuffer("");
while(fieldIter.hasNext()){
String field = fieldIter.next();
content.append(field+":"+doc.get(field)).append(" ");
//System.out.println(field);
}
System.out.println(content);
}