Solr从版本4开始实现了!join查询。
我想知道以下情况是否可行。例如,我们有以下形式的文档:
Doc1:
field2:A
field:456
Doc2:
,,, field1:123
,,, field2: B
field:789
doc3:
,,, field1:23456
,,, field2:
,,, field3:264
我们需要检索字段field2等于的所有文档B和不包含相同字段field1值的其他文档值为a的字段field2
在SQL中,这可以通过操作"not In "来完成:
select * from docwhere field2 = 'B' and field1不在(select field1 from doc wherefield2 = 'A')
连接操作符相当于SQL的in操作符。
我们可以使用solr join或其他函数来实现我们的需求吗?
谢谢
为此需要使用嵌套查询。下面是同样的问题和答案:
https://stackoverflow.com/a/27191274/4304116这里是你的例子的查询:
q=-_query_:"{!join from=doc_id to=id}field2:'A'"
它将返回所有字段2中没有"A"值的文档。
你也可以给q添加另一个条件(如果你只需要"B"值):
q={!join from=doc_id to=id}field2:'B'"
它将返回字段d2中所有值为'B'的文档。