如何按相关性对appengine搜索索引结果进行排序?

时间:2014-04-10 21:17:49

标签: google-app-engine gae-search

我正在开发一个项目,该项目使用Google App Engine的文本搜索API,允许用户搜索包含单词字段的文档。我正在使用MatchScorer进行排序,根据the documentation“根据文档中的术语频率分配得分”。

当用户输入“business promo”之类的查询时,我会将其转换为类似words:business OR words:promo的查询字符串。我原以为这会返回包含单词“business”和“promo”的文档,而文档只包含其中一个单词(因为文档说它根据文档中的术语频率分配了一个分数)。但是,我经常看到的结果只包含包含两者的文档之前的一个单词。

我也尝试使用RescoringMatchScorer进行查询,但使用此记分员会遇到同样的问题。

我考虑过进行单独的查询 - 与搜索条件和搜索条件相关的查询 - 但如果用户输入两个以上的搜索字词,则需要进行多次查询。例如,如果我搜索“高级业务解决方案”,我需要这样的查询来涵盖所有基础:

words:advanced AND words:business AND words:solutions
words:advanced AND words:business
words:advanced AND words:solutions
words:business AND words:solutions
words:advanced OR words:business OR words:solutions

在不太相关的结果之前,是否有人对如何执行返回更多相关结果(即更多搜索字词匹配)的搜索有任何提示?

1 个答案:

答案 0 :(得分:0)

也许这取决于你如何解释短语“术语频率”。我认为您将其解释为“我的文档中出现了多少搜索词”。但它也可能意味着“每个文档中出现了多少次(任何一个)搜索词”,实际上 - 至少根据我所做的一些简单实验 - 后者似乎是实际行为。

例如,包含“business”一词20次且从未提及“promo”一词的文档的评分高于仅包含“business”和“promo”的文档。那与你所看到的行为有关吗?