假设用户将此搜索字符串输入到新闻搜索引擎:
“哎呀,小唐纳德特朗普又做了一次(维基解密版):政治 - 粘贴”
想象一下,我们有一个新闻标题数据库和一个“重要人物”数据库。这里的目标是:如果搜索字符串包含重要人物,则返回包含此“子字符串”的结果,其排名高于不包含它的结果。
使用 Yahoo Vespa 引擎,我如何将充满人名的数据库与长新闻标题字符串进行匹配?
*我希望这是有道理的,对不起大家,我的英语不太好:(谢谢!
假设用户将此搜索字符串输入到新闻搜索引擎:
“哎呀,小唐纳德特朗普又做了一次(维基解密版):政治 - 粘贴”
想象一下,我们有一个新闻标题数据库和一个“重要人物”数据库。这里的目标是:如果搜索字符串包含重要人物,则返回包含此“子字符串”的结果,其排名高于不包含它的结果。
使用 Yahoo Vespa 引擎,我如何将充满人名的数据库与长新闻标题字符串进行匹配?
*我希望这是有道理的,对不起大家,我的英语不太好:(谢谢!
在新闻标题的文档处理/索引期间,您可以使用“重要人物”数据库从输入文本中提取命名实体。此过程可以在自定义文档处理器中实现。请参阅http://docs.vespa.ai/documentation/document-processing-overview.html)。
新闻搜索的文档定义可能看起来像这样,带有自定义排名功能。文档处理器读取输入标题并填充实体数组。
search news {
document news {
field title type string {
indexing: summary | index
}
field entities type array<string> {
indexing: summary | index
match: word
}
}
rank-profile entity-ranking {
first-phase {
expression: nativeRank(title) + matches(entities)
}
}
在查询时,您需要从查询输入中提取相同的命名实体,并构建一个 Vespa 查询树,该树可以搜索标题(例如使用 OR 或 WeakAnd),还可以使用 Vespa 在实体字段中搜索可能的命名实体排名运算符。例如,给定您的查询示例,实际查询可能类似于:
select * from sources * where rank(title contains "oops" or title
contains "donald" or title contains "trump", entities contains "Donald Trump Jr.");
您可以使用共享命名实体提取组件在自定义搜索器http://docs.vespa.ai/documentation/searcher-development.html中构建查询树。
一些资源