【问题标题】:Thinking sphinx with rails - order by association column用导轨思考狮身人面像 - 按关联列排序
【发布时间】:2013-05-03 16:24:12
【问题描述】:

thinking sphinx 中是否可以按关联列排序搜索结果?

我的索引定义如下:

ThinkingSphinx::Index.define :demand, :with => :active_record, :delta => true do
  indexes client(:name), as: :client, sortable: true
  has(created_at, updated_at, client_id)
end

在控制器中执行搜索:

Demand.search(params[:query], order: "#{params[:sort]} #{params[:direction].try(:upcase)}")

params[order] 的值是"client.name"params[:direction]"asc""desc"

这是由 sphinx 生成的查询:

SELECT * FROM `demand_core`, `demand_delta` WHERE MATCH('Test_client @sphinx_internal_class_name (Demand)') AND sphinx_deleted = 0 ORDER BY client.name DESC LIMIT 0, 20

当我执行搜索时,我收到以下错误:

ThinkingSphinx::SyntaxError - sphinxql: syntax error, unexpected CONST_FLOAT, expecting $end near '.name DESC LIMIT 0, 20; SHOW META':

我一直在寻找解决方案,但找不到。所以问题是我如何在执行搜索后在 sphinx 中应用排序?

【问题讨论】:

    标签: ruby-on-rails ruby full-text-search sphinx thinking-sphinx


    【解决方案1】:

    您需要在排序时使用字段/属性名称 - 所以在您的情况下,它应该是 client,而不是 client.name。希望更改传递给控制器​​的 params[:sort] 值不会太棘手。

    【讨论】:

    • 耶!这工作,非常感谢。也许您应该扩展您的答案,以便清楚如何解决该问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多