У меня есть даты, originalArrivalEta и realArrivalEta, и я хотел бы выполнить поиск Solr на основе разницы между этими датами.
Основная проблема в том, что мой временной диапазон не является непрерывным, он сращивается. Так, например, я хочу диапазон от 3 до 5 дней для более поздних и более ранних дат.
Я знаю, что может сделать:
fq: {!frange l=-172800000 u=172800000 incu=true incl=true}ms(originalArrivalEta, realArrivalEta)
Но, поскольку fq всегда объединяется, я не могу сделать:
fq: {!frange l=-172800000 u=-86400000 incu=true incl=true}ms(originalArrivalEta, realArrivalEta)
fq: {!frange l=86400000 u=172800000 incu=true incl=true}ms(originalArrivalEta, realArrivalEta)
Я также пытался сделать чистый минус, в основном пытаясь удалить «дыру» в середине диапазона, который меня не интересует:
fq: {!frange l=-172800000 u=172800000 incu=true incl=true}ms(originalArrivalEta, realArrivalEta)
fq: -{!frange l=-86400000 u=86400000 incu=true incl=true}ms(originalArrivalEta, realArrivalEta)
Я пытался использовать NOT и OR, но ни один из них не работает.
Я также попытался использовать fl, определив его:
fl: timediff:ms(originalArrivalEta, realArrivalEta)
Но я, похоже, не могу это отфильтровать. И я не уверен, что мой нынешний технологический стек позволяет мне делать это в любом случае, так как в настоящее время я использую движок Cassandra DSE 5.1, который использует Solr 6.0.
Есть ли способ использовать несколько frange, которые не связаны?
Есть ли какой-нибудь способ, которым я могу поместить это в q как:
q: ( {!frange l=-172800000 u=-86400000 incu=true incl=true}ms(originalArrivalEta, realArrivalEta) OR {!frange l=86400000 u=172800000 incu=true incl=true}ms(originalArrivalEta, realArrivalEta) )
Я знаю, что на производительность, скорее всего, повлияет, но если нет другого способа сделать это, то лучше медленнее, чем никогда.
Спасибо за помощь!