我必须要约会,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)
但是我似乎无法对此进行过滤。而且我不确定我目前的技术堆栈是否仍允许我执行此操作,因为我当前正在使用使用Solr 6.0的Cassandra DSE 5.1引擎。
有没有一种方法可以使用多个未串联的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) )
我知道性能可能会受到影响,但是如果没有其他方法可以做到,那么慢就总比没有好。
感谢您的帮助!
答案 0 :(得分:1)
您可以使用_query_
内联运行其他查询-可能会起作用。
但是,在这种情况下,您执行have the abs
function,这将只允许您定义一个范围。
为了获得更好的性能,我建议也为该字段建立索引,并使用更新链填充它-这样,您可以使用任何查询语法而不必调用函数。