按日期称量 Sphinx 结果
我在网站上使用 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
搜索结果:
- 条目 3 - 网球
- 条目 6 - 网球场
- 条目 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:
- Entry 3 - Tennis
- Entry 6 - Tennis Court
- 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我找到了一种使用 @mobius 的
SetSortMode
示例的变体来实现此目的的方法。我没有使用
SPH_SORT_EXTENDED
,而是使用了SPH_SORT_EXPR
以及下面的表达式:这使我能够对即将出现的结果进行更高的权重,然后将未来的结果稍微降低,最后将旧的结果放在最后。
分子中的大数字与 UNIX 时间戳中的小数位数相对应。
I have found a way to do this using a variation of @mobius'
SetSortMode
example.Instead of using
SPH_SORT_EXTENDED
, I usedSPH_SORT_EXPR
along with the expression below: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.
在 sphinx.conf 上,您应该在选择查询中将日期指定为时间戳,如下所示:
并指定 date_timestamp 列的类型为时间戳依据:
现在您可以按时间戳列对结果进行排序。检查 Sphinx 手册的排序部分 http://sphinxsearch.com/docs/current.html #sorting-modes
即 PHP 中:
On your sphinx.conf you should specify the date as a timestamp in your select query as such:
and specify that the date_timestamp column is of type timestamp by:
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: