【问题标题】:Thinking Sphinx without records within date range error在日期范围内没有记录的思考狮身人面像错误
【发布时间】:2013-09-05 08:12:39
【问题描述】:

我试图在我的 rails 4 项目中使用思考狮身人面像查询来查找未在特定日期范围内创建的记录,并将 postgresql 作为数据库

这行得通

Housing.search "some text",
star: true, 
ranker: :bm25, 
with: {created_at (3.weeks.ago..Time.zone.now)}

但事实并非如此

Housing.search "some text",
star: true,
ranker: :bm25,
without: {created_at:(3.weeks.ago..Time.zone.now)}

我认为这是查询中的错误,因为它找到了给定日期范围内的所有记录,但找不到相反的记录?

这是我的宝石文件

gem 'mysql2', '0.3.12b4'
gem 'thinking-sphinx', github: 'pat/thinking-sphinx'
gem 'flying-sphinx', github: 'flying-sphinx/flying-sphinx'
gem 'delayed_job_active_record', '>= 4.0.0.beta2'
gem 'delayed_job_web'
gem 'ts-delayed-delta', github: 'pat/ts-delayed-delta'

这是我的住房指数

ThinkingSphinx::Index.define :housing, :with => :active_record, :delta => ThinkingSphinx::Deltas::DelayedDelta do
  has created_at
  < + OTHER FIELDS THAT ARE INDEXED >
  set_property :enable_star => true
  set_property :min_infix_len => 1
  set_property :html_strip => true
  set_property :charset_type => "utf-8"
end

这是不使用时来自日志的查询:{created_at:(3.weeks.ago..Time.zone.now)}

  Sphinx Query (1.0ms)  SELECT * FROM `housing_core`, `housing_delta` WHERE MATCH('@location_name *Krimml*') AND max_capacity BETWEEN 1 AND 1000 AND number_of_bathrooms BETWEEN 1 AND 3 AND number_of_bed_places BETWEEN 2 AND 10 AND sphinx_deleted = 0 AND created_at < 1376554070 OR created_at > 1378368470 AND activated_at <> 0 LIMIT 0, 20 OPTION ranker=bm25

这就是我遇到的错误

sphinxql: syntax error, unexpected OR, expecting $end near 'OR created_at > 1378368470 AND   activated_at <> 0 LIMIT 0, 20 OPTION ranker=bm25; SHOW META'

这是使用时来自日志的查询:{created_at:(3.weeks.ago..Time.zone.now)}

Sphinx Query (3.9ms)  SELECT * FROM `housing_core`, `housing_delta` WHERE MATCH('@location_name *Krimml*') AND created_at BETWEEN 1376555152 AND 1378369552 AND max_capacity BETWEEN 1 AND 1000 AND number_of_bathrooms BETWEEN 1 AND 3 AND number_of_bed_places BETWEEN 2 AND 10 AND sphinx_deleted = 0 AND activated_at <> 0 LIMIT 0, 20

所以我认为我正在寻找的是要执行的查询

AND created_at NOT BETWEEN 1376555152 AND 1378369552

【问题讨论】:

    标签: sql ruby-on-rails-4 thinking-sphinx date-range rails-postgresql


    【解决方案1】:

    我认为 without 方法没有范围,我想是因为你想索引部分数据而不是没有部分的所有数据,所以你可以使用逆表达式。

    没有这样的

    without: {created_at (3.weeks.ago..Time.zone.now)}
    

    将是这样的(为您的数据提供安全的一年)

    with: {created_at (Time.now.change(:year => 2012)..3.weeks.ago)}
    

    当然,你的情况是一个很好的例子,因为如果数据是一致的,你就不会在“未来”创造东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多