[英]ElasticSearch + Tire: OR query
我在使用Tire定義查詢時遇到了一些麻煩。
我有的:
我的文件是事件。 它們有一個starts_at
日期和一個ends_at
日期。 ends_at
日期不是必需的。
我想要的是:
我想顯示即將發生的事件(例如)。 我將定義upcoming
如下:
ends_at
日期 要么
ends_at
日期不存在,AND starts_at
在Time.now之后 現在我正在做
query do
boolean do
must { range :starts_at, { gte: bod } }
end
end
我怎么能這個OR查詢?
我現在能想到的唯一方法是在字符串查詢中使用_missing_
和_exists_
:
require 'tire'
require 'active_support/core_ext/numeric/time'
require 'active_support/core_ext/date/calculations'
require 'active_support/duration'
Time::DATE_FORMATS.update :lucene => "%Y-%m-%dT%H:%M:%S%z"
Tire.index('events_stackoverflow_demo').delete
class Event
include Tire::Model::Persistence
property :title
property :starts_at, type: 'date'
property :ends_at, type: 'date'
index_name 'events_stackoverflow_demo'
end
Event.create id: 1, title: 'Test 1', starts_at: 2.days.ago, ends_at: 1.days.ago
Event.create id: 2, title: 'Test 2', starts_at: 1.day.ago, ends_at: 1.day.since
Event.create id: 3, title: 'Test 3', starts_at: 1.day.since
Event.tire.index.refresh
upcoming = Event.search do
query do
boolean minimum_number_should_match: 1 do
should { string "_exists_:ends_at AND ends_at:[#{Time.now.to_s(:lucene)} TO *]" }
should { string "_missing_:ends_at AND starts_at:[#{Time.now.to_s(:lucene)} TO *]" }
end
end
p to_curl
end.results
puts "---"
p upcoming
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.