Я создаю приложение Rails 5 с Angular 7 фронтентом. В этом приложении я использую Searchkick (драгоценный камень Elasticsearch) и проиндексировал модель с именем Event, которая получила атрибуты title (string) и start_at (datetime).
Я хочу иметь возможность построить запрос в Контроллер поиска, где я могу сделать следующее:
- Поиск в заголовке с нечетким поиском, означающим, что он не должен соответствовать 100% (что сейчас требуется).
- Поиск с диапазоном дат, совпадающим с начальным значением для индексированных событий.
Это мой метод индекса контроллера
def index
args = {}
args[:eventable_id] = params[:id]
args[:eventable_type] = params[:type]
args[:title] = params[:title] if params[:title].present?
if params[:starts_at].present?
args[:starts_at] = {}
args[:starts_at][:gte] = params[:starts_at].to_date.beginning_of_day
args[:starts_at][:lte] = params[:ends_at].to_date.end_of_day
end
@events = Event.search where: args, page: params[:page], per_page: params[:per_page]
end
Я добавил эту строку в Модель моего события
searchkick text_middle: [:title]
Это фактический запрос, который выполняется
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [{
"term": {
"eventable_id": "2"
}
}, {
"term": {
"eventable_type": "Space"
}
}, {
"term": {
"title": "nice event"
}
}, {
"range": {
"starts_at": {
"from": "2020-02-01T00:00:00.000Z",
"include_lower": true,
"to": "2020-02-29T23:59:59.999Z",
"include_upper": true
}
}
}]
}
},
"timeout": "11s",
"_source": false,
"size": 10000
}
Поиск по дате не работает (но я не получаю ошибок ) и поиск по названию должен совпадать на 100% (даже в случае).
Благодарю за помощь!