0

我有一个项目有时间表的场景,时间表有很多不同的名称和截止日期。

鉴于我可以搜索项目并对项目字段值甚至多态字段值进行排序,我如何根据具有请求的计划名称的计划对结果进行排序。

用简单的英语,在 Thinking-Sphinx 中,我如何按匹配计划名称的截止日期对搜索结果进行排序,例如。我希望按“预订”(Schedule)截止日期对项目进行排序。

这似乎在 Sphinx 中应该很简单,但它避开了我。我已经考虑构建一个考虑日程名称的搜索后排序,但 Sphinx 排序会更受欢迎。

我已经尝试过类似以下的方法,但它不考虑计划名称。

class Project
   has_many :schedules

   define_index do
      has schedules.due_date, :type => :datetime, :as => :due_date
   end
end

$: Project.search(query, :order => "due_date desc", :match_mode => :extended)

有趣的是,我确实得到了结果(有点排序),但它不准确,可能是因为它没有考虑到属于一个项目的许多时间表,因此不是特定于字段值的。我也考虑过使用“with”但是

有没有办法用 Thinking Sphinx 完成这个任务?(我在 Rails 2.3.x 上,所以我在 think-sphinx 1.4.3 上。)

[编辑] 我已经使用 <=> 运算符成功地对这个后搜索进行了排序,但这需要查找时间表。我还研究了表达式排序,但这仅适用于正在搜索的模型的字段,我不知道我可以索引什么以使其可用。

4

2 回答 2

2

来自 Pat Allan:按照我所描述的方式,这是不可能的。应改为搜索时间表。

请参阅 Pat在 Google Group 讨论中的回答。“你想用 Sphinx 做的事情是不可能的在项目索引中。我建议您改为在日程表上搜索,然后,因为只有一个日程表名称和一个日程表截止日期,所以应该没问题。从那里,您可以在搜索结果中使用该日程表的项目。 "

于 2013-02-16T21:49:35.920 回答
1

我想你必须使用你的查询

默认情况下,排序模式是 asc 用于更改您需要指定的

Project.search <query>, :order => <attribute_name>, :sort_mode => :desc, :match_mode =>:extended

如果你想使用多个属性,或者 Sphinx 的排名分数,那么你需要使用 :extended 排序模式。

Project.search <query>, :sort_mode => :extended, :order => "attribute_name DESC/ASC, @relevance DESC/ASC", :match_mode=> :extended

http://pat.github.com/ts/en/searching.html#sorting

于 2013-02-08T13:03:04.300 回答