如何在Solr中进行部分更新?

如何在Solr中进行部分更新?,solr,schema,solrj,nested-documents,solr8,Solr,Schema,Solrj,Nested Documents,Solr8,根据solr文件 原子更新文档的核心功能要求架构中的所有字段都必须配置为存储(stored=“true”)或docValues(docValues=“true”)字段,但在将内容索引到第一个核心后,您是否在任何时候更改了第一个核心的架构?该错误不是由name字段引起的,它与包含子文档的文档相关://安全检查:不允许更新包含子文档的现有文档,除非我们实际支持此操作。在Solr 8.8中已删除了产生错误的代码路径,因此升级可能会解决您的问题。但是,请注意,参考指南中的注释与字段本身无关。如果您提交该

根据solr文件


原子更新文档的核心功能要求架构中的所有字段都必须配置为存储(stored=“true”)或docValues(docValues=“true”)字段,但在将内容索引到第一个核心后,您是否在任何时候更改了第一个核心的架构?该错误不是由
name
字段引起的,它与包含子文档的文档相关:
//安全检查:不允许更新包含子文档的现有文档,除非我们实际支持此操作。
在Solr 8.8中已删除了产生错误的代码路径,因此升级可能会解决您的问题。但是,请注意,参考指南中的注释与字段本身无关。如果您提交该字段的内容,一切都会很好。但是,如果您只提交其他某个字段的内容,Solr将无法获取
name
字段的实际值,该字段将丢失。@MatsLindh不,我没有更改架构文件,实际上,我在两个核心中都索引了相同的文档,并且我的所有文档都有嵌套文档
  <field name="_nest_path_" type="_nest_path_" stored="true"/>
  <field name="_root_" type="string"     indexed="true" stored="false"/>
  <field name="_version_" type="plong"  indexed="false" stored="false" docValues="true" useDocValuesAsStored="false" multiValued="false"/>
  <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
  <field name="sender" type="plong" docValues="true" indexed="true" stored="true" multiValued="false"/>
  <field name="text" type="text_general" uninvertible="false" omitNorms="false" indexed="true" stored="false" multiValued="false"/>
  <field name="name" type="text_general" uninvertible="true" omitNorms="false" indexed="true" stored="false" docValues="false" multiValued="false"/>  
  <field name="uniqueId" type="text_general" uninvertible="true" omitNorms="false" indexed="true" stored="true" multiValued="false"/>
  <field name="type" type="string" uninvertible="true" docValues="true" indexed="true" stored="false" useDocValuesAsStored="false" multiValued="false"/>
  <field name="value" type="string" uninvertible="true" docValues="true" indexed="true" stored="false" useDocValuesAsStored="false" multiValued="false" omitNorms="false"/>
  <field name="userId" type="plong" uninvertible="true" docValues="true" indexed="true" stored="false" useDocValuesAsStored="false" multiValued="false"/>
<field name="_nest_path_" type="_nest_path_"/>
<field name="_root_" type="string" docValues="false" indexed="true" stored="false"/>
<field name="_version_" type="plong" indexed="false" stored="false"/>
<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="sender" type="plong" docValues="true" indexed="true" stored="true" multiValued="false"/>
<field name="text" type="text_general" uninvertible="false" omitNorms="false" indexed="true" stored="false" multiValued="false"/>
<field name="name" type="text_general" uninvertible="true" omitNorms="false" indexed="true" stored="false" docValues="false" multiValued="false"/>
<field name="uniqueId"  type="text_general" uninvertible="true" omitNorms="false" indexed="true" stored="true" multiValued="false"/>
<field name="type"  type="string" uninvertible="true" docValues="true" indexed="true" stored="false" useDocValuesAsStored="false" multiValued="false"/>
<field name="value" type="string" uninvertible="true" docValues="true" indexed="true" stored="false" useDocValuesAsStored="false" multiValued="false" omitNorms="false"/>
<field name="userId" type="plong" uninvertible="true" docValues="true" indexed="true" stored="false" useDocValuesAsStored="false" multiValued="false"/>
SolrInputDocument document = new SolrInputDocument();
        document.setField("id", String.valueOf(id));
        document.setField("sender", id * 2);
        document.setField("text", "sampleText" + id);
        document.setField("name", "saba" + "safavi" + id);
        document.setField("uniqueId", "test" + id + DateUtil.getNowDate().getTime());
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> obj;
        for (int i = 0; i < 10; i++) {
            obj = new HashMap<>();
            obj.put("type", "type" + i);
            obj.put("value", "value" + i);
            obj.put("userId", i);
            list.add(obj);
        }
        List<SolrInputDocument> metadataDocumentList = new ArrayList<>();
        for (Map<String, Object> stringObjectMap : list) {
            SolrInputDocument metadataDoc = new SolrInputDocument();
            for (Map.Entry<String, Object> stringObjectEntry : stringObjectMap.entrySet()) {
                metadataDoc.addField(stringObjectEntry.getKey(), stringObjectEntry.getValue());
            }
            metadataDocumentList.add(metadataDoc);
        }
        document.addField("meta", metadataDocumentList);
        try {
            UpdateResponse response = solrClient.add("test_core_2", document);
//            UpdateResponse response = solrClient.add("test_core_1", document);
            solrClient.commit("test_core_2");
//            solrClient.commit("test_core_1");
        } catch (SolrServerException | IOException e) {
            logger.error("error occured in add or update document solr.", e);
        }

SolrInputDocument solrDocument = new SolrInputDocument();
        solrDocument.addField("id", "20");
        Map<String, Object> fieldModifier = new HashMap<>();
        fieldModifier.put("set", "sabaNew20");
        solrDocument.addField("name", fieldModifier);
        try {
            UpdateResponse response = solrClient.add("test_core_1", solrDocument);
            solrClient.commit("test_core_1");
        } catch (SolrServerException | IOException e) {
            logger.error("error occurred in delete message #",e);
        }