草庐IT

java - RemoteSolrException : ERROR: [doc=2] unknown field 'firstName'

coder 2023-10-24 原文

我写了一个 Spring 项目,它使用 SolrInputDocument 从表中添加数据。我使用了 doc.addField() 方法

doc.addField("actorId",a.getId()); doc.addField("firstName",a.getFirstName()); (仅发布其中的一小部分) 用于添加我从 MySql 检索到的数据。

当我尝试将这些值添加到 SOLR 索引时,出现以下错误。

线程“主”中的异常 org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException:错误:[doc=2] 未知字段“firstName”位于 org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:552) 在 org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210) 在 org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206) 在 org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:124) 在 org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68) 在 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-schemaschema.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 中,您可以定义一类字段,例如所有名称以 _s(字符串)或 _i<>(整数),这些类在 Solr 中被调用 Dynamic Fields .

managed-schema(aka Schemaless)配置中,所有最重要的字段类型都已准备好使用(即字符串、整数、 boolean 值、日期、货币、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 字段的类型为字符串。

关于java - RemoteSolrException : ERROR: [doc=2] unknown field 'firstName' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43828173/

有关java - RemoteSolrException : ERROR: [doc=2] unknown field 'firstName'的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - Ruby on Rails : . 常量化 : wrong constant name error? - 2

    我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby​​常量:Content2而不是content2。Aconstantnamestart

  4. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  5. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  6. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  7. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  8. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  9. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  10. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

随机推荐