2

我们正在使用 Lucene 搜索我们的一个项目。该网站发展迅速,需要改进搜索。一个关键的事情是混合新近度和相关性。

目前,搜索发生在用户在某些指定字段(如页面标题、内容等)中输入的关键术语上,并返回得分最高的结果。

现在用户发现这些结果并不是很有用,因为他们在顶部看到旧日期的文章。虽然内容是相关的,但它不是最近的。

我们需要提升搜索结果以包含发布/更新日期。我们有一个计算列(publishedupdateddate),如何使用查询时间提升来提升搜索结果?

如果不是查询时间,我们是否有任何其他方式在计算项目分数时包含日期...

请指教

4

2 回答 2

1

您可以使用标准的站点核心搜索 API 创建一种日期评分形式。通过在不同的日期范围上添加几个 OR 条件,即

AND (Title = searchTerm OR author = searchTerm) AND ( publishDate > dateTime.Now.AddDays(-7) OR publishDate > dateTime.Now.AddDays(-30) OR publishDate > dateTime.Now.AddDays(-90) OR publishDate > dateTime.Now.AddDays(-180) 或 publishDate > dateTime.Now.AddDays(-365) )

在上面的示例中,3 天前的文章将通过匹配所有 5 个日期条件获得 5 倍的相关性。9 个月前的文章在 < -365 条件下只能得分一次。一篇超过 365 天的文章将被完全排除,因为外部 AND 条件要求这些日期条件中至少有一个必须匹配,将其翻转为 OR 意味着我们只是在事情匹配时添加相关性,而不是在他们没有。

于 2017-09-30T09:07:42.603 回答
0

通常创建计算字段是为了让我们向索引添加额外的数据。只有当您与他们一起简化查询时,他们才能缩短查询时间。如果你想更快地给出结果,那么你应该尝试使用 SOLR 或一些缓存 - 但是当我们不知道你有多大的数据集以及你的查询有多复杂时,很难选择正确的路径。

于 2017-09-23T16:31:53.403 回答