Как ИЛИ два соединения в Solr

У меня есть следующее утверждение:

({!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])

И, возможно, я должен упомянуть, что я использую его как фильтрующий запрос, но, насколько я понимаю, это не должно влиять на результат.


person Mathias Mahlknecht    schedule 07.10.2016    source источник
comment
Что говорит вам отладка в окончательном проанализированном запросе?   -  person Alexandre Rafalovitch    schedule 08.10.2016
comment
Добавляю разобранный запрос. Похоже, он не анализируется, как я предполагал, но я до сих пор не понимаю, почему.   -  person Mathias Mahlknecht    schedule 11.10.2016
comment
@AlexandreRafalovitch есть мысли?   -  person Mathias Mahlknecht    schedule 20.10.2016
comment
Я тоже в тупике. Возможно, стоит задать этот вопрос в списке рассылки SolrUsers, возможно, вы нашли ошибку или есть что-то очевидное, что заметят другие. Просто не забудьте сначала повторно протестировать это на Solr 6.2.   -  person Alexandre Rafalovitch    schedule 20.10.2016
comment
Хорошо, так и сделаю, спасибо   -  person Mathias Mahlknecht    schedule 21.10.2016


Ответы (2)


Я спросил сейчас в списке рассылки 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=... и, видимо, это было слишком.

person Mathias Mahlknecht    schedule 21.10.2016

На 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 не в подвыбор

Вам не нужно ИЛИ, оно будет проигнорировано, но соединения находятся в ИЛИ.

Важно: первое соединение должно быть в _query_:"...join..."

Еще примеры с отрицанием:

&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]
person MartinD85    schedule 07.02.2018