【发布时间】:2019-10-28 23:49:13
【问题描述】:
我有日期,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) )
我知道性能可能会受到影响,但如果没有其他方法可以做到这一点,那么慢总比没有好。
感谢您的帮助!
【问题讨论】:
-
你can use
_query_to run other queries inline - 也许这会起作用?您还有theabsfunction,它只允许您定义一个范围。为了获得更好的性能,我建议也对该字段进行索引,并使用更新链填充它 - 这样您就可以使用任何查询语法而无需调用函数。 -
腹肌!当然,这么简单优雅的答案,谢谢!
标签: solr cassandra datastax datastax-enterprise