考虑用户将此搜索字符串输入到新闻搜索引擎:
"哎呀,小唐纳德特朗普再次(维基解密版)::政治 - 粘贴"
想象一下,我们有一个新闻标题数据库,以及一个重要人物数据库"。 这里的目标是:如果搜索字符串包含重要人物,则返回包含此"子字符串"的结果。排名较高的那些不包含它的结果。
使用Yahoo Vespa引擎,如何将一个充满人名的数据库与长新闻标题字符串进行匹配?
*我希望有道理,对不起大家,我的英语不太好:(谢谢!
答案 0 :(得分:3)
在新闻标题的文档处理/索引期间,您可以使用“重要人物”数据库从输入文本中提取命名实体。该过程可以在自定义文档处理器中实现。见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 Rank运算符。例如,给出您的查询示例,实际查询可能类似于:
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中构建查询树。
一些资源