Найти перекрывающиеся диапазоны в Алголии?

Как бы вы искали в Алголии перекрывающиеся числовые диапазоны?

Например (мой вариант использования), я работаю с событиями в календаре. У каждого события есть date и endDate, и я пытаюсь найти все события, выпадающие на месяц. Прямо сейчас я ищу с помощью «numericFilters» следующим образом:

{
  ...
  "facetFilters":"...",
  "numericFilters":"[[
    \"date:1517472000000 TO 1524985199999\",
    \"endDate:1517472000000 TO 1524985199999\"
  ]]"
}

Это дает мне все события, которые начинаются или заканчиваются в течение месяца. Но как насчет событий, которые начинаются в прошлом месяце и заканчиваются в следующем месяце? Как мне их искать?


person nicholas    schedule 17.04.2018    source источник
comment
or any elasticsearch: Алголия не основана на ElasticSearch. Решение, вероятно, будет отличаться для каждой поисковой системы.   -  person PLNech    schedule 17.04.2018
comment
Я исправляюсь. Я думал, что algolia и elasticsearch работают одинаково.   -  person nicholas    schedule 18.04.2018
comment
Нет проблем :) Если вы хотите узнать больше о том, как создается Algolia, ознакомьтесь с серией блогов Внутри Algolia Engine!   -  person PLNech    schedule 18.04.2018


Ответы (1)


Не уверен, как бы вы сделали это с помощью elasticsearch, однако с Algolia это правильный подход. Удалив фильтрацию по date, вы сможете получить все события, которые начались в любое время и закончились в этом месяце:

"numericFilters":"[[
  \"endDate:1517472000000 TO 1524985199999\"
]]"

Но если вы хотите, чтобы все события, происходящие в течение месяца, которые начались до или в течение этого месяца и закончились во время или после этого месяца, вы будет фильтровать, чтобы удалить те, которые начинаются после конца месяца, и те, которые заканчиваются до начала месяца:

"filters":"date < 1524985199999 AND endDate > 1517472000000"
person PLNech    schedule 17.04.2018
comment
Гений. Это именно то, что мне было нужно. - person nicholas; 18.04.2018