【问题标题】:Error - Rebuild search index with django-oscar and Solr错误 - 使用 django-oscar 和 Solr 重建搜索索引
【发布时间】:2018-03-08 19:58:47
【问题描述】:

我正在关注 django documentation 将 solr 与 django-Oscar 集成。尝试重建索引时出现以下错误。如何解决此问题?

$python3 manage.py rebuild_index --noinput 因为您这么说,所以从您的索引中删除所有文档。 无法清除 Solr 索引:Solr 响应错误(HTTP 500):[原因:错误 500 {msg=SolrCore 'collection1' 由于初始化失败而不可用:架构解析失败:未知字段 'id'。架构文件是 /project/solr-4.7.2/example/solr/collection1/schema.xml,trace=org.apache.solr.common.SolrException: SolrCore 'collection1' 由于初始化失败不可用: Schema Parsing Failed:未知字段“id”。架构文件是 /project/solr-4.7.2/example/solr/collection1/schema.xml 在 org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:827) 在 org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:305) 在 org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:205) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 在 org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) 在 org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 在 org.eclipse.jetty.server.Server.handle(Server.java:368) 在 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) 在 org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) 在 org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953) 在 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014) 在 org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861) 在 org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) 在 org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) 在 org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 在 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 在 java.lang.Thread.run(Thread.java:748) 原因:org.apache.solr.common.SolrException:模式解析失败:未知字段“id”。架构文件是 /project/solr-4.7.2/example/solr/collection1/schema.xml 在 org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:618) 在 org.apache.solr.schema.IndexSchema.(IndexSchema.java:166) 在 org.apache.solr.schema.IndexSchemaFactory.create(IndexSchemaFactory.java:55) 在 org.apache.solr.schema.IndexSchemaFactory.buildIndexSchema(IndexSchemaFactory.java:69) 在 org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:559) 在 org.apache.solr.core.CoreContainer.create(CoreContainer.java:597) 在 org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:258) 在 org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:250) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ... 1 更多 引起:java.lang.RuntimeException:未知字段'id' 在 org.apache.solr.schema.IndexSchema.getIndexedField(IndexSchema.java:340) 在 org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:536) ... 13 更多 ,代码=500}] 回溯(最近一次通话最后): 文件“/home/asanka/.local/lib/python3.5/site-packages/haystack/backends/solr_backend.py”,第 105 行,清晰 self.conn.delete(q='*:*', commit=commit) 文件“/home/asanka/.local/lib/python3.5/site-packages/pysolr.py”,第 948 行,删除 return self._update(m, commit=commit, softCommit=softCommit, waitFlush=waitFlush, waitSearcher=waitSearcher, handler=handler) _update 中的文件“/home/asanka/.local/lib/python3.5/site-packages/pysolr.py”,第 488 行 return self._send_request('post', path, message, {'Content-type': 'text/xml; charset=utf-8'}) _send_request 中的文件“/home/asanka/.local/lib/python3.5/site-packages/pysolr.py”,第 403 行 引发 SolrError(error_message % (resp.status_code, solr_message)) pysolr.SolrError:Solr 响应错误(HTTP 500):[原因:错误 500 {msg=SolrCore 'collection1' 由于初始化失败而不可用:模式解析失败:未知字段 'id'。架构文件是 /home/asanka/Music/devBranch/dailyDeal_v3/main_app/solr-4.7.2/example/solr/collection1/schema.xml,trace=org.apache.solr.common.SolrException: SolrCore 'collection1' 不是由于初始化失败而可用:模式解析失败:未知字段“id”。架构文件是 /home/asanka/Music/devBranch/dailyDeal_v3/main_app/solr-4.7.2/example/solr/collection1/schema.xml 在 org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:827) 在 org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:305) 在 org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:205) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 在 org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) 在 org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 在 org.eclipse.jetty.server.Server.handle(Server.java:368) 在 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) 在 org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) 在 org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953) 在 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014) 在 org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861) 在 org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) 在 org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) 在 org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 在 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 在 java.lang.Thread.run(Thread.java:748) 原因:org.apache.solr.common.SolrException:模式解析失败:未知字段“id”。架构文件是 /home/asanka/Music/devBranch/dailyDeal_v3/main_app/solr-4.7.2/example/solr/collection1/schema.xml 在 org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:618) 在 org.apache.solr.schema.IndexSchema.(IndexSchema.java:166) 在 org.apache.solr.schema.IndexSchemaFactory.create(IndexSchemaFactory.java:55) 在 org.apache.solr.schema.IndexSchemaFactory.buildIndexSchema(IndexSchemaFactory.java:69) 在 org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:559) 在 org.apache.solr.core.CoreContainer.create(CoreContainer.java:597) 在 org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:258) 在 org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:250) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ... 1 更多 引起:java.lang.RuntimeException:未知字段'id' 在 org.apache.solr.schema.IndexSchema.getIndexedField(IndexSchema.java:340) 在 org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:536) ... 13 更多 ,代码=500}] 删除所有文件。

【问题讨论】:

  • 您在运行此命令之前是否构建了 solr 架构?您似乎使用了错误的架构。
  • 是的,我确实将架构构建并替换为 django-oscar 文档。使用:python3 manage.py build_solr_schema > solr-4.7.2/example/solr/collection1/conf/schema.xml跨度>
  • 我最好的猜测是您放置架构文件的位置不是 solr 正在寻找的位置。您需要检查需要为您的 solr 版本放置架构的位置,并将其写入该位置。该文档给出了一个关于模式文件位置可能已经过时的示例。
  • Schema.xml 放置在正确的路径上,但使用 build_solr_schema 创建的架构似乎无效。我尝试使用 oscar 沙箱构建架构,它给出了相同的无效架构。

标签: django search solr django-oscar


【解决方案1】:

我遇到了类似的问题。在检查 solr 架构 (conf/schema.xml) 文件时,我发现 <field name="id"> 行重复(不完全重复,但对于相同的 name 参数肯定重复)。

我删除了<field name="id"> 的第二个实例,问题已解决。

我最终将solr 和最新的haystack 升级到了6.6.3,build_schema 现在可以正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 2011-03-21
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2014-06-24
    相关资源
    最近更新 更多