1

我们需要“混合来自不同来源的命中”,根据您的文档,建议在 JAVA 中编写自定义搜索器。在 Github 上的某个地方有这个演示吗?我什至不知道从哪里开始:(我知道我可以创建搜索“链”,最好是异步的,然后在返回它们之前在 JAVA 中混合结果......但是我将如何处理分页、限制......等等?这一切似乎很复杂,对于那些甚至不太了解 JAVA 的人来说。所以,我希望有人已经为此编写了一个演示?拜托?有人吗?

太感谢了

编辑使我的问题更清楚:

我们正在编写一个从各种网站获取数据的搜索引擎。一些网站有 1000 万个可索引项目,而其他网站只有 100,000 个。当我们将结果呈现给最终用户时,我们希望包括来自所有来源的结果(当匹配适用时)。假设我们抓取的每个网站都有 10 个结果,因此它们都在页面上获得同等数量的关注。如果我们不进行自定义混合,那么会发生的情况是,拥有最多商品的最大网站会赢得我们所有的流量。

我知道我们可以向 VESPA 发送 10 个单独的查询,并将结果混合到我们的前端,但这似乎非常低效。因此,“客户搜索器”的问题。太感谢了 !

4

1 回答 1

0

该文档涵盖了一些您没有的非常高级的用例。您的来源是不同的 Vespa 模式或内容集群吗?如果是这样,Vespa 默认情况下会根据它们的相关性分数混合从每个返回的命中,所以你不需要做任何事情。

另外两个最常见的用例是:

  • 部分(或全部)数据源是外部的,因此您需要编写一个 Searcher 组件来获取外部数据并将其转换为 Result。
  • 您希望以某种自定义方式(而不是通过相关性分数)混合数据。如果是这样,您需要排除默认的混合搜索器 (com.yahoo.prelude.searcher.BlendingSearcher) 并编写自己的。

如果您提供有关您的用例的更多信息,我可以给您一些代码示例。

编辑:使用分组来解决问题中“编辑”下解释的需求:

  • 馈送时创建一个“siteid”字段(例如在文档处理中)。
  • 使用分组表达式all(group(siteid) each(max(10) output(summary())))

http://docs.vespa.ai/documentation/grouping.html

于 2018-02-19T13:16:13.210 回答