Java Solr正在抛出一个异常,指示集合名称丢失,尽管它与云模式下的请求一起发送

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. 我已确保集合名称确实是从我的代码中发送

我正在尝试使用solrj在集合中添加/删除文档。 当我在SolrCloudClient实例上设置默认集合时,该过程成功完成。但是,当我尝试将集合名称与请求一起发送而不是设置默认集合时,会引发异常:

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)来检查它;谢谢你的帮助。我从链接中了解到,不可能添加或删除文档