Solr lucene服务器不发布提交消息

时间:2011-05-26 15:52:26

标签: lucene solr

我们有一个名为“server”的CommonsHttpSolrServer变量,我们正在使用格式正确的SolrInputDocument执行server.add(...),其上有几个字段(id和accountNumber)。我们的文档未显示在Solr存储库中。当我们复制Solr演示工具SimplePostTool的源代码(手动格式化HTTP帖子)时,Solr服务器已更新。当我们比较两个帖子之间的差异时,我们发现SimplePostTool代码发送了一个由

组成的后续帖子
<commit/>

即使我们有一个server.commit(),在与CommonsHttpSolrServer直接交互时,也不会向我们的Solr服务器发布提交标记。我们也尝试了解决方案 http://www.mail-archive.com/solr-dev@lucene.apache.org/msg12289.html 尝试将提交发布到Solr服务器但仍然没有提交。当我们执行server.add(...)然后运行SimplePostTool时,SimplePostTool提供的提交会成功导致所有挂起的Solr更新被提交。

我们的问题是如何使用CommonsHttpSolrServer强制将提交发布到Solr服务器,而不是将原始HTTP帖子混合在一起。

我们正在使用solr-core 3.1.0

谢谢!

这是有问题的代码,它是通过Spring配置的Groovy代码,如果你愿意,我可以提出不同的样本。

//message queue listener receives an ImagingMessage
class ImagingProcessor {
  SolrServer server
  void process(ImagingMessage message) {
    server.add(DocumentFactory.createDocument(message.indexedFields, message.file))
    server.commit()
        //also tried http://www.mail-archive.com/solr-dev@lucene.apache.org/msg12289.html 
        //and varios flavors of .commit(boolean, boolean)
  }
}

class ImagingMessage {
  List<IndexedField> indexedFields
  byte[] file
}

class DocumentFactory {
  static SolrInputDocument createDocument(List<IndexedField> indexedFields, byte[] file) {
    SolrInputDocument solrInputDocument = new SolrInputDocument()
    indexedFields.each {
      solrInputDocument.addField it.name, it.value
    }
    solrInputDocument.addField "content", file
    println solrInputDocument.toString()
    solrInputDocument
  }
}

我们确实有一个基于SimplePostTool运行的解决方案来发布一个标签,而不是使用server.commit(),但这只是一个丑陋的临时黑客。

我们并不真的想要为每条消息提交(正如我们在这里的spike / demo代码中所做的那样),但我们确实需要偶尔提交,例如可能按计划进行,否则我们填写的内容的尾部lucene存储将不可见。

0 个答案:

没有答案