1

使用 sphinx 2 出现此错误

sphinxql: syntax error, unexpected IDENT, expecting CONST_INT or CONST_FLOAT or '-' near 'WI AND published = 1 AND sphinx_deleted = 0 LIMIT 0, 10; SHOW META'

index.html.erb

在部分集合行的模板中抛出错误:@posts_by_state,但同一部分的其他两个实例运行良好。状态排序是什么把它扔掉了。

post_controller.rb

@posts_by_state = Post.search(params[:search], with: { state: current_user.state, published: true }, :page => params[:page], :per_page => 10)

post_index.rb

ThinkingSphinx::Index.define :post, :with => :active_record do
  indexes :title, as: :post_title
  indexes :desc, as: :description
  indexes tags(:name), as: :tag_name
  #indexes happening_on, sortable: true
  #has author_id, published_at
  has published_at
  has last_touched
  has state
  has published

  set_property:field_weights => {
    :post_title => 5,
    :description => 1,
    :tag_name => 10
  }
end
4

1 回答 1

3

Sphinx 中的字符串属性只能用于排序 - 不能过滤,不能分组 - 因此您可以解决此问题的选项如下:

  • 将其拉出到关联的模型中(也许是 State 或 PostState?),然后改为通过外键整数进行过滤。
  • 将该值存储为字段,并使用 :conditions 而不是 :with。
  • 用CRC32 值破解它。

我强烈推荐这些选项中的第一个(我认为它更清洁、准确),但这取决于你。

于 2013-08-01T23:58:44.370 回答