如何从处理器向DocumentProcessing管道发送自定义DocumentOperation?

时间:2018-05-21 18:13:20

标签: vespa

场景:我一直坚持这个问题很长时间,我认为解决方案可能很容易,但我只是看不到它,这就是场景:

cURL POST to http://localhost:8080/my_imports (raw JSON data on body)
 ->
   MyImportsCustomHandler (extends ThreadedHttpRequestHandler [Validations]
    ->
      MyObjectProcessor (extends Processor) [JSON deserialize and data massage]
       ->
         MyFirstDocumentProcessor (extends DocumentProcessor) [Set some fields and save]

问题是执行从未到达MyFirstDocumentProcessor,可能是因为请求未从document_api端点(故意)开始。 没有抛出任何错误,只是处理路由永远不会到达文档处理器链,我认为应该因为MyObjectProcessor我正在做:

DocumentType type = 
localDocHandler.getDocumentTypeManager().getDocumentType("my_doc");
DocumentId id = new DocumentId("id:default:my_doc::2");
Document document = new Document(type, id);
DocumentPut docPut = new DocumentPut(document);

Processing proc = com.yahoo.docproc.Processing.of(docPut);

我从这里得到了这个想法:https://github.com/vespa-engine/vespa/blob/master/docproc/src/test/java/com/yahoo/docproc/util/SplitterJoinerTestCase.java 但是在那个测试中,我看到了这一行splitter.process(p);,我找不到在处理器内部工作的合适替代品,在这种情况下,我只有RequestExecutionDocumentProcessingHandler

我希望精通Vespa的人能够对此有所了解,这只是处理链上的最后一跳,我无法弥合:|

1 个答案:

答案 0 :(得分:0)

要从Java代码编写文档,您需要使用Document Access API: http://docs.vespa.ai/documentation/document-api-guide.html#document-access

工作解决方案位于https://github.com/vespa-engine/sample-apps/pull/44