Wpis z mikrobloga

Jest tu jakiś mirek wymiatający w #elasticsearch ?

Potrzebuję znaleźć wszystkie eventy w zakresie np. od 2020-02-02 do 2020-03-01
Event ma taki schemat:

schedule: {
availability_period: [{from: "2020-01-01", to: "2020-01-31"}, {"from": "2020-03-01", "to": "2020-03-30"}],
available_days_of_week: [{"3": ["15:00"], "4": ["12:00", "17:00"}]
excluded_dates: "2020-03-05"
}

Jak uwzględnić wszystkie te pola w jednym query? Da się to w ogóle zrobić? Jedyne na co wpadłem i działa to brute-force który robi tyle bool query co dni w zakresie ale to bez sensu...

#programowanie #bazydanych
  • 5
@metaforyczny_kierowca:

A jaki jest warunek dopasowania eventu? Data musi być w availabilityperiod ale nie w excludeddates?

Tak, dokładnie.

Może prościej wyjdzie napisać skrypt w painless?

Myślałem, ale to będzie duży data set i dla każdego Eventa musiałaby być iteracja po availability_period a potem po available_days_of_week więc boję się o performance.
@metaforyczny_kierowca:

A po co iteracja po availableDaysOfWeek?

Może źle to ująłem. Zmatchowany availability_period w połączeniu z querowaną datą, musiałby zawierać któryś z available_days_of_week. Pewnie do zrobienia, ale czy tak rozbudowany skrypt to nie anty-pattern?

AvailabilityPeriod jest typu object czy nested?

Nested.
@mordechaj_blumstein: czyli to nie tylko data, która jest w przedziale i nie jest excluded, ale też dzień tygodnia musi się zgadzać? Pokręcone mocno. Rozbudowanie skryptu i jego wydajność to już trade-off i zależy jak często będzie wykonywany.

Może rozwiązaniem byłaby zmiana indeksów? Każdy schedule miałby swój indeks i routowanie byłoby w aplikacji.