Java Solr正在抛出一个异常,指示集合名称丢失,尽管它与云模式下的请求一起发送
我正在尝试使用solrj在集合中添加/删除文档。 当我在SolrCloudClient实例上设置默认集合时,该过程成功完成。但是,当我尝试将集合名称与请求一起发送而不是设置默认集合时,会引发异常:Java Solr正在抛出一个异常,指示集合名称丢失,尽管它与云模式下的请求一起发送,java,solr,solrj,Java,Solr,Solrj,我正在尝试使用solrj在集合中添加/删除文档。 当我在SolrCloudClient实例上设置默认集合时,该过程成功完成。但是,当我尝试将集合名称与请求一起发送而不是设置默认集合时,会引发异常: org.apache.solr.client.solrj.SolrServerException: No collection param specified on request and no default collection has been set. 我已确保集合名称确实是从我的代码中发送
org.apache.solr.client.solrj.SolrServerException: No collection param specified on request and no default collection has been set.
我已确保集合名称确实是从我的代码中发送的
代码如下:
public void createDocument(Document document, String collectionName) throws BusinessException
{
SolrInputDocument solrInputDocument = new SolrInputDocument();
//cloudSolrClient.setDefaultCollection(collectionName);
Map<String,Object> fieldsData = document.getData();
for( String fieldName : fieldsData.keySet() )
{
Object fieldValue = fieldsData.get(fieldName);
solrInputDocument.addField(fieldName, fieldValue);
}
try
{
System.out.println(collectionName);
UpdateResponse documentAdditionResponse = cloudSolrClient.add(collectionName, solrInputDocument);
if(documentAdditionResponse.getStatus() != 0)
{
throw new BusinessException(StaticResponseCode.SOLR_SERVER_ERROR);
}
cloudSolrClient.commit();
}
catch(SolrException e)
{
throw new BusinessException(StaticResponseCode.NON_EXISTENT_COLLECTION);
}
catch (SolrServerException | IOException e)
{
e.printStackTrace();
throw new BusinessException(StaticResponseCode.SOLR_SERVER_ERROR);
}
}
public void createDocument(Document Document,String collectionName)引发BusinessException
{
SolrInputDocument SolrInputDocument=新的SolrInputDocument();
//setDefaultCollection(collectionName);
Map fieldsData=document.getData();
for(字符串字段名:fieldsData.keySet())
{
对象fieldValue=fieldsData.get(fieldName);
solrInputDocument.addField(字段名、字段值);
}
尝试
{
System.out.println(collectionName);
UpdateResponse documentAdditionResponse=cloudSolrClient.add(collectionName,solrInputDocument);
if(documentAdditionResponse.getStatus()!=0)
{
抛出新的BusinessException(StaticResponseCode.SOLR\u服务器错误);
}
cloudSolrClient.commit();
}
捕获(solrexe)
{
抛出新的BusinessException(StaticResponseCode.不存在\u集合);
}
捕获(SolrServerException | IOE异常)
{
e、 printStackTrace();
抛出新的BusinessException(StaticResponseCode.SOLR\u服务器错误);
}
}
我缺少什么?您必须设置
cloudSolrClient.setDefaultCollection(collectionName)代码>
我测试了下面的代码,它只在我们设置默认集合时起作用
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.zookeeper.KeeperException;
public class Test {
private static final String collectionName = "gettingstarted";
public static void main(String[] args)
throws Exception {
String solrZkHostPort = "localhost:2195";
CloudSolrClient cloudSolrClient;
List<String> zk_Hosts = Arrays.asList(solrZkHostPort.split(","));
cloudSolrClient = new CloudSolrClient.Builder(zk_Hosts, Optional.empty()).build();
SolrInputDocument solrInputDocument = new SolrInputDocument();
cloudSolrClient.setDefaultCollection(collectionName);
solrInputDocument.addField("id", "value");
System.out.println(collectionName);
UpdateResponse documentAdditionResponse = cloudSolrClient.add(collectionName, solrInputDocument);
if (documentAdditionResponse.getStatus() != 0) {
System.out.println(documentAdditionResponse.getStatus());
}
cloudSolrClient.commit();
}
}
导入java.util.array;
导入java.util.List;
导入java.util.Optional;
导入org.apache.solr.client.solrj.SolrServerException;
导入org.apache.solr.client.solrj.impl.CloudSolrClient;
导入org.apache.solr.client.solrj.response.UpdateResponse;
导入org.apache.solr.common.SolrException;
导入org.apache.solr.common.SolrInputDocument;
导入org.apache.zookeeper.KeeperException;
公开课考试{
私有静态最终字符串collectionName=“gettingstarted”;
公共静态void main(字符串[]args)
抛出异常{
字符串solrZkHostPort=“localhost:2195”;
云雾弥漫云雾弥漫;
List zk_Hosts=Arrays.asList(solrZkHostPort.split(“,”);
cloudSolrClient=new cloudSolrClient.Builder(zk_Hosts,可选.empty()).build();
SolrInputDocument SolrInputDocument=新的SolrInputDocument();
setDefaultCollection(collectionName);
addField(“id”,“value”);
System.out.println(collectionName);
UpdateResponse documentAdditionResponse=cloudSolrClient.add(collectionName,solrInputDocument);
if(documentAdditionResponse.getStatus()!=0){
System.out.println(documentAdditionResponse.getStatus());
}
cloudSolrClient.commit();
}
}
请参考下面的链接
您必须设置cloudSolrClient.setDefaultCollection(collectionName)代码>
我测试了下面的代码,它只在我们设置默认集合时起作用
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.zookeeper.KeeperException;
public class Test {
private static final String collectionName = "gettingstarted";
public static void main(String[] args)
throws Exception {
String solrZkHostPort = "localhost:2195";
CloudSolrClient cloudSolrClient;
List<String> zk_Hosts = Arrays.asList(solrZkHostPort.split(","));
cloudSolrClient = new CloudSolrClient.Builder(zk_Hosts, Optional.empty()).build();
SolrInputDocument solrInputDocument = new SolrInputDocument();
cloudSolrClient.setDefaultCollection(collectionName);
solrInputDocument.addField("id", "value");
System.out.println(collectionName);
UpdateResponse documentAdditionResponse = cloudSolrClient.add(collectionName, solrInputDocument);
if (documentAdditionResponse.getStatus() != 0) {
System.out.println(documentAdditionResponse.getStatus());
}
cloudSolrClient.commit();
}
}
导入java.util.array;
导入java.util.List;
导入java.util.Optional;
导入org.apache.solr.client.solrj.SolrServerException;
导入org.apache.solr.client.solrj.impl.CloudSolrClient;
导入org.apache.solr.client.solrj.response.UpdateResponse;
导入org.apache.solr.common.SolrException;
导入org.apache.solr.common.SolrInputDocument;
导入org.apache.zookeeper.KeeperException;
公开课考试{
私有静态最终字符串collectionName=“gettingstarted”;
公共静态void main(字符串[]args)
抛出异常{
字符串solrZkHostPort=“localhost:2195”;
云雾弥漫云雾弥漫;
List zk_Hosts=Arrays.asList(solrZkHostPort.split(“,”);
cloudSolrClient=new cloudSolrClient.Builder(zk_Hosts,可选.empty()).build();
SolrInputDocument SolrInputDocument=新的SolrInputDocument();
setDefaultCollection(collectionName);
addField(“id”,“value”);
System.out.println(collectionName);
UpdateResponse documentAdditionResponse=cloudSolrClient.add(collectionName,solrInputDocument);
if(documentAdditionResponse.getStatus()!=0){
System.out.println(documentAdditionResponse.getStatus());
}
cloudSolrClient.commit();
}
}
请参考下面的链接
取消对cloudSolrClient.setDefaultCollection(collectionName)的注释;并使用cloudSolrClient.add(solrInputDocument)在何处创建集合?您确定您的案例中存在集合吗?如果没有,那么问题就存在了。不是吗?我知道你们提供的替代方案很有效。我一开始就在使用它,但是我特别想问为什么当前的代码不起作用。是的,我确信集合存在。我可以在solr管理UI中看到它。您是否可以通过启用cloudSolrClient.setDefaultCollection(collectionName)来检查它;取消对cloudSolrClient.setDefaultCollection(collectionName)的注释;并使用cloudSolrClient.add(solrInputDocument)在何处创建集合?您确定您的案例中存在集合吗?如果没有,那么问题就存在了。不是吗?我知道你们提供的替代方案很有效。我一开始就在使用它,但是我特别想问为什么当前的代码不起作用。是的,我确信集合存在。我可以在solr管理UI中看到它。您是否可以通过启用cloudSolrClient.setDefaultCollection(collectionName)来检查它;谢谢你的帮助。我从链接中了解到,不可能添加或删除文档