如何从另一个组件正确调用搜索

How to properly invoke search from another component

您好,我正在尝试从处理链中执行搜索。目前我正在通过以下方式创建执行

Chain<Searcher> chain = Chain<>(new DomainSearcher())
Execution.Context context = Execution.Context.createContextStub()
Execution execution = new Execution(chain, context)
Query query = new Query()
query.model.queryTree.root = new WordItem(key, "field", true)
Result result = execution.search(query)

当我得到结果的 concreteHitCount 时,它总是显示 0,当我得到 yqlRepresentation 时,从容器外部使用相同的 yql 查询将 return 正确的结果。我假设问题是由上下文作为空存根引起的,但在所有文档中,任何生成的查询都来自自定义搜索器,该搜索器可以访问基本执行,例如 Blog Recommendation 示例中的示例应用程序。对此的任何帮助将不胜感激。谢谢。

是的,Execution.Context.createContextStub() 返回的存根仅用于测试,并未提供所需的所有信息。相反:

  1. 在您的组件中注入一个 com.yahoo.search.searchchain.ExecutionFactory(通过在构造函数中将其声明为参数)。

  2. 要执行,请调用 executionFactory.newExecution(chain)