RemoteSolrException: ERROR: [doc=2] unknown field 'firstName'
RemoteSolrException: ERROR: [doc=2] unknown field 'firstName'
我写了一个 Spring 项目,它使用 SolrInputDocument 从表中添加数据。我使用了 doc.addField() 方法
doc.addField("actorId",a.getId());
doc.addField("firstName",a.getFirstName());
(仅发布其中的一小部分)
用于添加我从 MySql 检索到的数据。
当我尝试将这些值添加到 SOLR 索引时,出现以下错误。
Exception in thread "main" org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: ERROR: [doc=2] unknown field 'firstName' at
org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:552)
at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210) at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206)
at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:124)
at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68)
at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54)
我请求你帮助我知道我必须在任何其他文件中的什么地方提到字段 "id" 和 "firstName" 以便 SOLR 知道我正在使用这些作为添加数据的参数。
当出现 RemoteSolrException
消息时 ERROR: [doc=2] unknown field ...
显然意味着您要插入的字段不存在于您的索引(核心或集合)中。
您绝对必须阅读 Solr 文档,因为在 Solr 模式的设计中隐藏了大部分 Solr 信息检索 (IR) 逻辑。我建议阅读 Solr Overview of Documents, Fields, and Schema Design.
无论如何,我会尽量给你一些指导和建议,以避免对我来说更难理解的东西。
首先,您必须认识到 Solr 运行 作为独立服务器或在 SolrCloud 模式下的区别。前者是一个服务器,它的配置在本地写入磁盘,用于每个索引(命名为核心)。后者是集群配置,其中更多 Solr 实例表现为单个服务器(即分布式搜索、分片、副本、容错等),配置存储在 Zookeeper 集合体上。
我强烈建议从独立配置开始,除了所有差异之外,独立配置在您的光盘中可以轻松访问,并且具有 SolrCloud 中存在的所有 IR 功能。
同样,您还应该认识到 managed-schema
和 schema.xml
中索引 运行 之间的区别:
managed-schema
is the name for the schema file Solr uses by default to support making Schema changes at runtime via the Schema
API, or Schemaless Mode features.
schema.xml
is the traditional name for a schema file which can be edited manually by users who use the ClassicIndexSchemaFactory.
在这种情况下,需要理解的重要一点是,在 Solr 中,您可以定义一个 class 字段,例如所有名称以 _s
(字符串)或 _i
(整数),这些classes在Solr中被调用Dynamic Fields。
在 managed-schema
(又名 Schemaless)配置中,所有最重要的字段类型都可以使用(即字符串、整数、布尔值、日期、货币、text_general 等)。这提供了立即加载数据的机会,您所要做的就是在每个字段的末尾添加正确的后缀:
productName
变为 productName_s
manufacturer
变为 manufacturer_s
quantity
变为 manufacturer_i
dateInvoice
变成 dateInvoice_d
price
变为 price_c
动态字段可以在无模式和传统模式模式下使用。
那么为什么会有这种差异呢?好吧,部分是历史原因,我认为 Solr 工程师试图让用户更容易地将他们的数据加载到 Solr 索引中。但是,当您开始编写自己的自定义 schema.xml
时,您终于可以访问 IR 的强大功能,这使 Solr 和 Lucene 引擎如此著名,并且是周围最好的开源全文服务器之一。
很可能您已经在索引中使用无模式模式,因此只需更改 firstName_s
中的字段名称并尝试再次加载数据。
关于id
字段,在schemaless模式下id
字段是作为主键的特殊字段,是一种“保留名”,不需要加任何后缀。
id
字段的类型为字符串。
我写了一个 Spring 项目,它使用 SolrInputDocument 从表中添加数据。我使用了 doc.addField() 方法
doc.addField("actorId",a.getId());
doc.addField("firstName",a.getFirstName());
(仅发布其中的一小部分)
用于添加我从 MySql 检索到的数据。
当我尝试将这些值添加到 SOLR 索引时,出现以下错误。
Exception in thread "main" org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: ERROR: [doc=2] unknown field 'firstName' at
org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:552)
at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210) at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206)
at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:124)
at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68)
at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54)
我请求你帮助我知道我必须在任何其他文件中的什么地方提到字段 "id" 和 "firstName" 以便 SOLR 知道我正在使用这些作为添加数据的参数。
当出现 RemoteSolrException
消息时 ERROR: [doc=2] unknown field ...
显然意味着您要插入的字段不存在于您的索引(核心或集合)中。
您绝对必须阅读 Solr 文档,因为在 Solr 模式的设计中隐藏了大部分 Solr 信息检索 (IR) 逻辑。我建议阅读 Solr Overview of Documents, Fields, and Schema Design.
无论如何,我会尽量给你一些指导和建议,以避免对我来说更难理解的东西。
首先,您必须认识到 Solr 运行 作为独立服务器或在 SolrCloud 模式下的区别。前者是一个服务器,它的配置在本地写入磁盘,用于每个索引(命名为核心)。后者是集群配置,其中更多 Solr 实例表现为单个服务器(即分布式搜索、分片、副本、容错等),配置存储在 Zookeeper 集合体上。
我强烈建议从独立配置开始,除了所有差异之外,独立配置在您的光盘中可以轻松访问,并且具有 SolrCloud 中存在的所有 IR 功能。
同样,您还应该认识到 managed-schema
和 schema.xml
中索引 运行 之间的区别:
managed-schema
is the name for the schema file Solr uses by default to support making Schema changes at runtime via the Schema API, or Schemaless Mode features.
schema.xml
is the traditional name for a schema file which can be edited manually by users who use the ClassicIndexSchemaFactory.
在这种情况下,需要理解的重要一点是,在 Solr 中,您可以定义一个 class 字段,例如所有名称以 _s
(字符串)或 _i
(整数),这些classes在Solr中被调用Dynamic Fields。
在 managed-schema
(又名 Schemaless)配置中,所有最重要的字段类型都可以使用(即字符串、整数、布尔值、日期、货币、text_general 等)。这提供了立即加载数据的机会,您所要做的就是在每个字段的末尾添加正确的后缀:
productName
变为productName_s
manufacturer
变为manufacturer_s
quantity
变为manufacturer_i
dateInvoice
变成dateInvoice_d
price
变为price_c
动态字段可以在无模式和传统模式模式下使用。
那么为什么会有这种差异呢?好吧,部分是历史原因,我认为 Solr 工程师试图让用户更容易地将他们的数据加载到 Solr 索引中。但是,当您开始编写自己的自定义 schema.xml
时,您终于可以访问 IR 的强大功能,这使 Solr 和 Lucene 引擎如此著名,并且是周围最好的开源全文服务器之一。
很可能您已经在索引中使用无模式模式,因此只需更改 firstName_s
中的字段名称并尝试再次加载数据。
关于id
字段,在schemaless模式下id
字段是作为主键的特殊字段,是一种“保留名”,不需要加任何后缀。
id
字段的类型为字符串。