首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.apache.solr.common.SolrException:文档缺少强制性uniqueKey字段: MongoDB中Solr的id

org.apache.solr.common.SolrException:文档缺少强制性uniqueKey字段: MongoDB中Solr的id
EN

Stack Overflow用户
提问于 2014-04-22 07:03:21
回答 1查看 4.2K关注 0票数 1

我有一个我无法解决的问题。部分是因为我不能用正确的条件来解释。我对这个问题感到很抱歉。

下面你可以看到我的目标概述。

我使用的是MongoDB & Solr 4.6.0。

我在一些文章中发现MongoDB-Solr连接与Mongo是可能的。

为此,在我的系统中,我成功地安装了Mongo。

当我运行以下命令时,它会给出以下错误

代码语言:javascript
复制
mongo-connector -m localhost:27017 -t http://localhost:8080/solr -d Desktop/mongo-connector/mongo_connector/doc_managers/solr_doc_manager.py

在终端中,它提供以下日志

代码语言:javascript
复制
2014-04-22 12:19:35,572 - INFO - Beginning Mongo Connector
2014-04-22 12:19:35,619 - INFO - Starting new HTTP connection (1): localhost
2014-04-22 12:19:35,660 - INFO - Finished 'http://localhost:8080/solr/admin/luke?show=schema&wt=json' (get) with body '' in 0.049 seconds.
2014-04-22 12:19:35,670 - INFO - MongoConnector: Empty oplog progress file.
2014-04-22 12:19:35,674 - INFO - OplogThread: Initializing oplog thread
2014-04-22 12:19:35,676 - INFO - MongoConnector: Starting connection thread MongoClient('localhost', 27017)
2014-04-22 12:19:35,682 - INFO - OplogThread: dumping collection mydb.testData
2014-04-22 12:19:35,684 - INFO - OplogThread: dumping collection test.testData
2014-04-22 12:19:35,724 - INFO - OplogThread: dumping collection Naresh.products
2014-04-22 12:19:35,726 - INFO - OplogThread: dumping collection mine.products
2014-04-22 12:19:35,727 - INFO - OplogThread: dumping collection mine.mine
2014-04-22 12:19:35,788 - INFO - Finished 'http://localhost:8080/solr/update/?commit=false' (post) with body 'u'<add><do' in 0.054 seconds.
2014-04-22 12:19:35,790 - ERROR - [Reason: None]
<response><lst name="responseHeader"><int name="status">400</int><int name="QTime">38</int></lst><lst name="error"><str name="msg">Document is missing mandatory uniqueKey field: id</str><int name="code">400</int></lst></response>
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/mongo_connector-1.2_-py2.7.egg/mongo_connector/oplog_manager.py", line 439, in dump_collection
    dm.bulk_upsert(docs_to_dump())
  File "Desktop/mongo-connector/mongo_connector/doc_managers/solr_doc_manager.py", line 185, in bulk_upsert
    "Could not bulk-insert documents into Solr")
OperationFailed: Could not bulk-insert documents into Solr
2014-04-22 12:19:35,792 - ERROR - OplogThread: Failed during dump collection cannot recover! Collection(Database(MongoClient('localhost', 27017), u'local'), u'oplog.rs')
2014-04-22 12:19:36,678 - ERROR - MongoConnector: OplogThread <OplogThread(Thread-2, started 140192603404032)> unexpectedly stopped! Shutting down
2014-04-22 12:19:36,678 - INFO - MongoConnector: Stopping all OplogThreads

在Solr Server中,它会产生以下错误

代码语言:javascript
复制
org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: id
    at org.apache.solr.update.AddUpdateCommand.getIndexedId(AddUpdateCommand.java:92)
    at org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:582)
    at org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:435)
    at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:100)
    at org.apache.solr.handler.loader.XMLLoader.processUpdate(XMLLoader.java:247)
    at org.apache.solr.handler.loader.XMLLoader.load(XMLLoader.java:174)
    at org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:92)
    at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:74)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1859)
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:710)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:413)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:197)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:368)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
    at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
    at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
    at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
    at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Thread.java:744)

我知道这是因为惟一字段id,但我已经将该字段定义为唯一字段。

这是我的Schema.xml

代码语言:javascript
复制
<field name="id" type="string" indexed="true" stored="true" />
<uniqueKey>id</uniqueKey>

还会给出同样的错误,为什么?

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-04-22 07:23:44

也许我能搞定。MongoDB使用_id作为唯一的id。所以你应该改变

代码语言:javascript
复制
<field name="id" type="string" indexed="true" stored="true" />
<uniqueKey>id</uniqueKey>

代码语言:javascript
复制
<field name="_id" type="string" indexed="true" stored="true" />
<uniqueKey>_id</uniqueKey>

或者向mongo连接器提供--unique-key=id选项。

请参阅https://github.com/10gen-labs/mongo-connector/wiki/Usage-with-Solr

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23212709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档