我希望跟进this根据日期提高结果的问题。但是,在这个问题上,衰减函数似乎在实际搜索内容上的优先级为

QueryBuilder qb = QueryBuilders.multiMatchQuery(term,"title", "description","url").field("title", 1.75f).field("url", 1.55f).field("description", 1.35f);
FunctionScoreQueryBuilder builder = QueryBuilders.functionScoreQuery(qb);
builder.add(ScoreFunctionBuilders.exponentialDecayFunction("postDate","14d"));

因此,例如,如果我使用上述构建器在Mario Draghi上的推文索引中搜索,如果在过去14天中有提及“Mario Draghi”的新推文,则排在第一位,然后在过去14天中有提及其他内容的推文与“Mario”匹配(而不是显示较旧的“Mario Draghi”推文)。

我想做的基本上是增强文档,如果其日期字段“postDate”是新的(可以说是14天),但我不希望该日期优先于搜索的准确性。与“ super 马里奥兄弟”的推文相比,我宁愿使用“Mario Draghi”的推文。换句话说,在我的索引中有成千上万条提及Mario Draghi的推文-但是在上面的代码中,只有它们在14天之内,我才能得到它们。

有人可以指出我要完成的更准确的方法吗?我在post中看到提升在范围内。这对我来说很有意义-但我想知道这是否是首选的方法吗?我希望以某种方式有一种更优雅的方式?

最佳答案

在许多情况下,理想的结果是保持您的相关度得分,并为最新的比赛提供额外的提升(更高的分数),因为数据更新鲜。为了实现这一点,您可以使用Elasticsearch的功能评分。 Webpage Source

final MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("Bababooey", "title^0.8", "url^0.6", "description^0.3").type(MultiMatchQueryBuilder.Type.BEST_FIELDS);

final FunctionScoreQueryBuilder functionScoreQuery = QueryBuilders.functionScoreQuery(multiMatchQuery);
functionScoreQuery.scoreMode("multiply");
functionScoreQuery.boostMode(CombineFunction.MULT);
functionScoreQuery.add(ScoreFunctionBuilders.gaussDecayFunction("postDate","130w").setOffset("26w").setDecay(0.3));

此示例增强了过去半年中发布的所有文档。六个月以上的文档得分将逐渐降低,直到达到两年半的阈值。超过两年半的文档不会根据新近度获得任何额外的评分,只需更改setOffet和setDecay即可将其转换为两周或任何可能的提升时间...

10-08 01:14