自定义搜索器 - 来自不同来源的命中混合

时间:2018-02-19 05:00:49

标签: vespa

我们需要"来自不同来源的点击混合",根据您的文档,建议在JAVA中编写自定义搜索器。有没有在Github上写过这个的演示?我甚至不知道从哪里开始:(我知道我可以创建搜索"链",最好是异步,然后在返回它们之前将结果混合在JAVA中...但是我将如何处理分页对于那些甚至不太了解JAVA的人来说,这一切看起来都非常复杂。所以,我希望有人已经为此编写了一个演示?请?有人吗?

非常感谢

编辑让我的问题更加清晰:

我们正在编写一个从各种网站获取数据的搜索引擎。有些网站有10mil可索引项,其他网站只有10万。当我们将结果呈现给最终用户时,我们希望包含来自所有来源的结果(当匹配适用时)。让我们说一下我们抓取的每个网站的10个结果,以便他们在页面上得到同等的关注。如果我们不进行自定义混合,那么最大的网站会占用我们所有的流量。

据我所知,我们可以向VESPA发送10个单独的查询,并将结果混合到我们的前端,但这似乎非常低效。因此," Custome Searcher"的问题。非常感谢你!

1 个答案:

答案 0 :(得分:0)

该文档涵盖了一些您没有的非常高级的用例。您的来源是不同的Vespa模式还是内容集群?如果是这样,Vespa将默认根据相关性分数混合每个返回的命中数,因此您无需做任何事情。

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

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

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

编辑:使用分组来解决" EDIT"在问题中:

  • 创建一个" siteid"喂食时的字段(例如文件处理)。
  • 使用分组表达式all(group(siteid) each(max(10) output(summary())))

请参阅http://docs.vespa.ai/documentation/grouping.html