按日期称量 Sphinx 结果

发布于 2025-01-04 16:44:50 字数 804 浏览 1 评论 0原文

我在网站上使用 Sphinx 搜索 来跟踪各种表条目。这些条目包含日期部分,并且在数据通过后相关性降低。

如何让 Sphinx 为符合搜索条件(例如关键字搜索)的结果分配更多的权重,然后为那些日期在过去但仍符合搜索条件的结果分配更少的权重?下图应有助于表达我的需求:

包含要搜索的数据的表格:

--------- ------------------ ---------
entry_id | title            | date    |
--------- ------------------ ---------
1         Tennis Racquet     12-10-2010
2         Basketball         03-24-2011
3         Tennis             03-03-2012
4         Skydiving          09-16-2012
5         Fishing            11-27-2012
6         Tennis Court       02-09-2013

搜索词:

tennis

搜索结果:

  1. 条目 3 - 网球
  2. 条目 6 - 网球场
  3. 条目 1 - 网球拍 - 这是最后返回的,因为该条目的日期早于今天的日期 (2-9-2012),但仍然与搜索词匹配

I am using Sphinx Search on a website to keep track of various table entries. These entries contain a date component and are less relevant after their data has been passed.

How can I have Sphinx assign more weight to results that match the search criteria (e.g. keyword search) and then assign less weight to those results that have a date in the past but still meet the search criteria? The illustration below should help to convey my needs:

Table containing data to be searched:

--------- ------------------ ---------
entry_id | title            | date    |
--------- ------------------ ---------
1         Tennis Racquet     12-10-2010
2         Basketball         03-24-2011
3         Tennis             03-03-2012
4         Skydiving          09-16-2012
5         Fishing            11-27-2012
6         Tennis Court       02-09-2013

Search Term:

tennis

Search Results:

  1. Entry 3 - Tennis
  2. Entry 6 - Tennis Court
  3. Entry 1 - Tennis Racquet - This is returned last because the date of this entry is before today's date (2-9-2012), but it still matches the search term

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别想她 2025-01-11 16:44:50

我找到了一种使用 @mobius 的 SetSortMode 示例的变体来实现此目的的方法。

我没有使用 SPH_SORT_EXTENDED,而是使用了 SPH_SORT_EXPR 以及下面的表达式:

$cl->SetSortMode ( SPH_SORT_EXPR, 
        " @weight + ( -1000000000/(" . time() . " - course_date_ts)) ");

这使我能够对即将出现的结果进行更高的权重,然后将未来的结果稍微降低,最后将旧的结果放在最后。

分子中的大数字与 UNIX 时间戳中的小数位数相对应。

I have found a way to do this using a variation of @mobius' SetSortMode example.

Instead of using SPH_SORT_EXTENDED, I used SPH_SORT_EXPR along with the expression below:

$cl->SetSortMode ( SPH_SORT_EXPR, 
        " @weight + ( -1000000000/(" . time() . " - course_date_ts)) ");

This allows me to weigh upcoming results higher, then future results slightly lower, and finally old results last.

The large number in the numerator is to correspond with the number of decimal places in the UNIX timestamp.

你对谁都笑 2025-01-11 16:44:50

在 sphinx.conf 上,您应该在选择查询中将日期指定为时间戳,如下所示:

SELECT entry_id, title, UNIX_TIMESTAMP(date) as date_timestamp FROM Table;

并指定 date_timestamp 列的类型为时间戳依据:

sql_attr_timestamp = date_timestamp

现在您可以按时间戳列对结果进行排序。检查 Sphinx 手册的排序部分 http://sphinxsearch.com/docs/current.html #sorting-modes

即 PHP 中:

$search->SetSortMode( SPH_SORT_EXTENDED, '@weight DESC, date_timestamp ASC );

On your sphinx.conf you should specify the date as a timestamp in your select query as such:

SELECT entry_id, title, UNIX_TIMESTAMP(date) as date_timestamp FROM Table;

and specify that the date_timestamp column is of type timestamp by:

sql_attr_timestamp = date_timestamp

Now you can sort the results by the timestamp column. Check the Sorting section of the Sphinx manual http://sphinxsearch.com/docs/current.html#sorting-modes

i.e in PHP:

$search->SetSortMode( SPH_SORT_EXTENDED, '@weight DESC, date_timestamp ASC );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文