如何在Solr中进行两个连接

时间:2016-10-07 11:37:14

标签: solr solr-query-syntax

我有以下声明:

({!join from=project_uuid to=id}type:EM_PM_Timerecord AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z]) OR ({!join from=project_uuid to=id}type:EM_CM_Request_Member AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z])

它不返回任何文档,但如果我只使用其中一个连接,例如:

{!join from=project_uuid to=id}type:EM_PM_Timerecord AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z]

它返回一些文件。

如果删除日期范围,它也会起作用:

({!join from=project_uuid to=id}type:EM_PM_Timerecord) OR ({!join from=project_uuid to=id}type:EM_CM_Request_Member)

有人能告诉我我错过了什么吗?第一个陈述有什么问题?

提前致谢。

修改

在调试中,解析后的查询如下所示:

(+JoinQuery({!join from=project_uuid to=id}type:EM_PM_Timerecord) +created:[1420074000000 TO 1451610000000]) (+JoinQuery({!join from=project_uuid to=id}type:EM_CM_Request_Member) +created:[1420074000000 TO 1451610000000])

也许我应该提一下,我将它用作过滤查询,但据我所知,它不会对结果产生影响。

2 个答案:

答案 0 :(得分:0)

我现在按照建议在SolrUsers邮件列表中询问,我得到了答案。

查询必须分成多个查询,如下所示:

&q={!join from=project_uuid to=id v=$q1} OR {!join from=project_uuid to=id v=$q2} 
&q1=type:EM_PM_Timerecord AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z] 
&q2=type:EM_CM_Request_Member AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z] 

它工作正常。

我的问题是,我把整件事放在& q = ...之下,显然这很多。

答案 1 :(得分:0)

在Solr 5/6上,只有以下内容在我这边工作:

&fq=_query_:"{!join from=project_uuid to=id v=$j1}" OR {!join from=project_uuid to=id v=$j2} 
&j1=type:EM_PM_Timerecord AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z] 
&j2=type:EM_CM_Request_Member AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z] 

OR

&fq=_query_:"{!join from=project_uuid to=id v=$j1}" {!join from=project_uuid to=id v=$j2} 
&j1=type:EM_PM_Timerecord AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z] 
&j2=type:EM_CM_Request_Member AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z]

我无法找到关于" _query _"的任何文档,我在Solr join "not in" subselect上找到了参数

你不需要它会被忽略,但是连接是在OR中。

重要提示:第​​一次加入必须在_query _:" ...加入..."

更多有否定的例子:

&fq=-_query_:"{!join from=project_uuid to=id v=$j1}" {!join from=project_uuid to=id v=$j2} 
&j1=type:EM_PM_Timerecord AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z] 
&j2=type:EM_CM_Request_Member AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z]

&fq=_query_:"{!join from=project_uuid to=id v=$j1}" {!join from=project_uuid to=id v=$j2} -{!join from=project_uuid to=id v=$j3} 
&j1=type:EM_PM_Timerecord AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z] 
&j2=type:EM_CM_Request_Member AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z]
&j3=type:EM_CM_Request_Member AND created:[2015-01-01T01:00:00Z TO 2016-01-01T01:00:00Z]