1

假设用户将此搜索字符串输入到新闻搜索引擎:

“哎呀,小唐纳德特朗普又做了一次(维基解密版):政治 - 粘贴”

想象一下,我们有一个新闻标题数据库和一个“重要人物”数据库。这里的目标是:如果搜索字符串包含重要人物,则返回包含此“子字符串”的结果,其排名高于不包含它的结果。

使用 Yahoo Vespa 引擎,我如何将充满人名的数据库与长新闻标题字符串进行匹配?

*我希望这是有道理的,对不起大家,我的英语不太好:(谢谢!

4

1 回答 1

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 在实体字段中搜索可能的命名实体排名运算符。例如,给定您的查询示例,实际查询可能类似于:

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中构建查询树。

一些资源

于 2018-01-19T11:31:14.167 回答