如何解决如何在 Solr 中进行部分更新?
根据 solr 文档
原子更新文档的核心功能要求架构中的所有字段都必须配置为存储 (stored="true") 或 docValues (docValues="true"), 必须存储 schema.xml 中的所有字段。我创建了两个核心 test_core_1 和 test_core_2。 这里是 test_core_1 架构 这是test_core_2 schema 我可以只更新第一个内核 (test_core_1) 中的 name 字段,但是对于第二个内核,我遇到了错误。 正如我们所看到的,我在两个核心的架构中都有非存储和非 docValues 字段,例如 name,差异与 nest_path、版本和root。
那么我怎么可能在第一个核心中更新名称(我的意思是更新部分文档或原子更新),但我从第二个核心中得到了这个错误。 来自 http://localhost:8983/solr 服务器的错误:此架构不
支持对嵌套文档的部分更新。请参阅参考指南。 根据文档,我必须从他们两个那里得到错误,我对 solr 中的这个主题感到困惑。
谁能解释一下? 这是我的代码 <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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。