我可以匹配字符串中的重要关键字吗?

时间:2018-01-18 19:07:54

标签: vespa

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

"哎呀,小唐纳德特朗普再次(维基解密版)::政治 - 粘贴"

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

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

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

1 个答案:

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

一些资源