我必须日期,原始的Arrivaleta和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)
但我似乎无法通过它过滤。我不确定我目前的技术堆栈是否允许我这样做,因为我目前使用的是CassandraDSE5.1引擎,它使用Solr6.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条答案
按热度按时间kqlmhetl1#
你可以用
_query_
以内联方式运行其他查询-这可能有用。但在这种情况下,你有
abs
函数,只允许您定义一个范围。为了获得更好的性能,我建议也为这个字段建立索引,并用更新链填充它—这样您就可以使用任何查询语法,而不必调用函数。