Несколько ИЛИ Frange в DSE Solr - PullRequest
0 голосов
/ 14 июня 2019

У меня есть даты, 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) ) 

Я знаю, что на производительность, скорее всего, повлияет, но если нет другого способа сделать это, то лучше медленнее, чем никогда.

Спасибо за помощь!

1 Ответ

1 голос
/ 14 июня 2019

Вы можете использовать _query_ для выполнения других встроенных запросов - это может сработать.

В этом случае, однако, у есть функция abs , которая позволит вам определить только один диапазон.

Для повышения производительности я бы предложил также проиндексировать это поле и заполнить его цепочкой обновлений - таким образом, вы можете использовать любой синтаксис запроса без необходимости вызова функций.

...