我有一个在Windows上运行的java程序:
1.使用“bin/solr.cmd restart -f -q -p 55183”运行Solr服务器。
1.使用“bin/solr.cmd delete -c my_core”删除名为“my_core”的旧核心(如果存在)。
1.使用“bin/solr.cmd create -c my_core”创建一个名为“my_core”的新核心。
1.配置方案时使用:
“bin/solr.cmd配置-c my_core -p 55183 -操作设置-用户-属性-属性更新。自动创建字段-值为假”。
1.使用solrj的HTTP客户端向方案中添加一个新字段。
1.执行其他几项操作,包括为某些文档编制索引。
我的机器上一切正常,但当我将其发送到公司的服务器群进行测试时,步骤5(添加字段)失败。
Solr Server返回的错误为:
2021-12-07 19:58:00.183错误(qtp 966739377 - 2\0)[ x:my_core] o.a.s.s.管理的索引模式错误持久化管理的模式C:\views\clones\clone 2\0\Qrelease\3rd\Solr\server\solr\my_core\conf\managed-schema =〉java.io.文件未找到异常:C:\views\clones\克隆2\0\Qrelease\3rd\Solr\服务器\solr\我的核心\配置\托管架构(访问被拒绝)
客户端返回的错误为:
异常代码:来自服务器的错误,位于:处理命令时出错:{响应头={状态=400,QTime=60},错误={元数据={错误类=org.apache.solr.api.ApiBag$异常与错误对象,根错误类=org.apache.solr.api.ApiBag$异常与错误对象},详细信息=[无法保持托管模式。保持托管模式C:\views\clones\clone 2\0\Qrelease\3rd\Solr\server\solr\my_core\conf\托管模式时出错],消息=处理命令时出错,代码=400}}
你知道为什么我可以在我的计算机上更改方案,而不能在远程计算机上吗?
2条答案
按热度按时间pprl5pva1#
当您使用Solr的HTTP API添加新字段时,会将新字段定义添加到
managed-schema
文件。它可以在您的计算机上运行,因为文件
managed-schema
存在,并且您具有对它的写访问权限。服务器环境上的错误表明该文件在服务器上不存在,因此我首先要确保核心是在与您在本地环境中相同的环境中创建的,并确保该文件确实存在。
我也看到过类似的问题,当文件确实存在,但运行Solr的用户没有对它的写入权限时。
ndh0cuux2#
我也遇到过同样的问题,但我已经解决了。以下是我遇到的问题的详细信息:
1.在PHP的生产服务器上运行得很好,我在那里用URL发送每个请求的凭据。我已经用这种方式很长时间了。
1.移植到我的测试服务器上的solrj,它的配置和生产服务器一样,除了它是一个运行ubuntu-18.04+tomcat-10.0.12+solr-8.8.1+mysql的服务器,而不是前端运行tomcat,后端运行solr+mysql。除了生产DMZ,安全设置是相同的。在测试服务器上一切都运行正常。
1.已将solrj实现移动到前端服务器,并收到身份验证错误(IOException)。
1.添加了PreemptiveAuthInterceptor(例如,请参见Solr basic authentication without setting credentials for each request)到我的httpClient到solrj,现在一般的身份验证问题消失了,但我开始得到与您相同的错误。
我也检查了@HectorCorrea的建议,但是solr是以solr用户的身份运行的,他也拥有托管模式文件。顺便说一句,字段 * 是 * 在错误发生之前创建的-我可以在托管模式文件中看到它,也可以在通过Rest API访问模式时看到它。如果我的解决方案没有帮助您,请尝试检查这些。
在沮丧中,我只是重新启动了solr服务并再次尝试。现在PHP和solrj实现都工作了。有趣的是,在创建新内核和添加字段时,日志文件中的其他错误也消失了,而这在PHP中是不会发生的:
也可以
最后是
要查看我的经验是否与您的经验匹配,您可以查看日志中是否出现类似的错误。
我不清楚为什么会这样,因为Solr的.xml文件中没有任何变化。我将避免猜测可能是什么导致了这一点,但我也会提到我的solrj版本在测试服务器和生产服务器上都是8.11.0,这与solr在任何一个服务器上都不匹配。请尝试重新启动并检查我上面提到的其他事情。