DSE Solr 中的多个或范围
Multiple OR frange in DSE Solr
我需要日期,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)
我也试图通过基本上尝试删除我不感兴趣的范围中间的 "hole" 来做一个纯粹的否定:
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) )
我知道性能可能会受到影响,但如果没有其他方法,那么慢总比没有好。
感谢您的帮助!
您可以使用 _query_
到 运行 其他内联查询 - 这可行。
在这种情况下,您可以 have the abs
function,这将允许您只定义一个范围。
为了获得更好的性能,我建议也为该字段建立索引,并使用更新链填充它 - 这样您就可以使用任何查询语法而无需调用函数。
我需要日期,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)
我也试图通过基本上尝试删除我不感兴趣的范围中间的 "hole" 来做一个纯粹的否定:
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) )
我知道性能可能会受到影响,但如果没有其他方法,那么慢总比没有好。
感谢您的帮助!
您可以使用 _query_
到 运行 其他内联查询 - 这可行。
在这种情况下,您可以 have the abs
function,这将允许您只定义一个范围。
为了获得更好的性能,我建议也为该字段建立索引,并使用更新链填充它 - 这样您就可以使用任何查询语法而无需调用函数。