dse solr中的多个或多个法兰

yduiuuwa  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(302)

我必须日期,原始的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) )

我知道性能可能会受到影响,但如果没有其他方法可以做到,那么慢一点总比不慢一点好。
谢谢你的帮助!

kqlmhetl

kqlmhetl1#

你可以用 _query_ 以内联方式运行其他查询-这可能有用。
但在这种情况下,你有 abs 函数,只允许您定义一个范围。
为了获得更好的性能,我建议也为这个字段建立索引,并用更新链填充它—这样您就可以使用任何查询语法,而不必调用函数。

相关问题