Solr 加入“不在”子选择中

Avn*_*evy 4 solr

在 Solr join 文档Solr Join中他们说:

/solr/collection1/select ? fl=xxx,yyy & q={!join from=inner_id to=outer_id}zzz:vvv
Run Code Online (Sandbox Code Playgroud)

相当于:

SELECT xxx, yyy
FROM collection1
WHERE outer_id IN (SELECT inner_id FROM collection1 where zzz = "vvv")
Run Code Online (Sandbox Code Playgroud)

我如何在 Solr 中编写(参见 NOT):

SELECT xxx, yyy
FROM collection1
WHERE outer_id NOT IN (SELECT inner_id FROM collection1 where zzz = "vvv")
Run Code Online (Sandbox Code Playgroud)

让我们考虑以下示例:
人员记录:

1. name='a', id=1, teacherId=4
2. name='b', id=2, teacherId=4
3. name='c', id=3, teacherId=1
4. name='d', id=4, isTeacher='true'
Run Code Online (Sandbox Code Playgroud)

现在我想选择其teacherId 指向非教师ID 的所有学生(记录#3)。
在 SQL 中:

select * from people where teacherId not in (select id where isTeacher='true').
Run Code Online (Sandbox Code Playgroud)

小智 6

我也面临这个问题,我是这样解决的:

q=-_query_:"{!join from=inner_id to=outer_id}zzz:vvv"
Run Code Online (Sandbox Code Playgroud)

您也可以添加此嵌套查询fq

希望有帮助!)