0

им пытаются найти записи, которые не создаются в определенном диапазоне дат с помощью запроса мышление сфинкса в моих рельсах 4 проекта с PostgreSQL в качестве базы данныхThinking Sphinx без записей в пределах погрешности диапазона дат

ЭТО РАБОТАЕТ

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)} 

I'm считать, что его ошибка в запросе, поскольку он находит все записи в пределах заданного диапазона дат, но не может найти противоположное?

Это мой Gemfile

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' 

Это мой housing_indices

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 

так я думаю, что глядя I'm для такого запроса будет выполняться

AND created_at NOT BETWEEN 1376555152 AND 1378369552 

ответ

1

Я думаю, что без метода не имеет диапазоны, я представить себе, потому что вы хотите индексировать порции данных, а не все данные без какой-либо части, так что вы можете использовать обратное выражение.

А без, как это

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

будет что-то вроде этого (с безопасным годом для ваших данных)

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

Конечно ваш случай является хорошим примером для этого, потому что вы Wouldn» t создали вещи в «будущем», если данные состоят.

Смежные вопросы