如何在Solr中创建一个或两个连接

如何在Solr中创建一个或两个连接,solr,solr-query-syntax,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]) 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])
&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] 

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

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

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

(+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])
&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=。。。显然,这是非常重要的。

在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] &fq=\u查询:“{!从=project\u uuid加入到=id v=$j1}”或{!从=project\u uuid加入到=id v=$j2}” &j1=类型:EM_PM_时间记录并创建:[2015-01-01T01:00:00Z至2016-01-01T01:00:00Z] &j2=类型:EM_CM_请求_成员并创建:[2015-01-01T01:00:00Z至2016-01-01T01:00:00Z] 或

&fq=\u query:“{!从=project\u uuid加入到=id v=$j1}”{!从=project\u uuid加入到=id v=$j2} &j1=类型:EM_PM_时间记录并创建:[2015-01-01T01:00:00Z至2016-01-01T01:00:00Z] &j2=类型:EM_CM_请求_成员并创建:[2015-01-01T01:00:00Z至2016-01-01T01:00:00Z] 我找不到任何关于“\u query\u”的文档,我在上找到了参数

您不需要,否则它将被忽略,但联接在或中

重要提示:第一个联接必须位于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] &fq=-\u query:“{!从=project\u uuid到=id v=$j1}”{!从=project\u uuid到=id v=$j2} &j1=类型:EM_PM_时间记录并创建:[2015-01-01T01:00:00Z至2016-01-01T01:00:00Z] &j2=类型:EM_CM_请求_成员并创建:[2015-01-01T01:00:00Z至2016-01-01T01:00:00Z] &fq=\u query:“{!从=project\u uuid到=id v=$j1}”{!从=project\u uuid到=id v=$j2}-{!从=project\u uuid到=id v=$j3} &j1=类型:EM_PM_时间记录并创建:[2015-01-01T01:00:00Z至2016-01-01T01:00:00Z] &j2=类型:EM_CM_请求_成员并创建:[2015-01-01T01:00:00Z至2016-01-01T01:00:00Z] &j3=类型:EM\U CM\U请求成员并创建:[2015-01-01T01:00:00Z至2016-01-01T01:00:00Z]
调试在最终解析查询中告诉您什么?我添加解析查询。看起来它并没有像我想的那样被解析,但我仍然不明白为什么。@AlexandreRafalovitch有什么想法吗?我也被难倒了。也许值得在SolrUsers邮件列表上问这个问题,也许你发现了一个bug,或者其他人会注意到一些明显的问题。请确保先在Solr6.2上重新测试。好的,我会这样做的,谢谢