SOLR根据条件过滤查询

SOLR filter query based on condition

我有一个 group 索引。群组有两种隐私类型,public 和私有。私人群组与访问代码相关联。在搜索结果中,只有当用户具有与之关联的访问代码时,才应包括私人群组。以前的私密群没有出现在搜索结果中,所以我有一个简单的查询!privacy_type:private

但现在我必须包含私人群组,如果用户拥有该群组的访问代码(用户可以有多个访问代码,我们必须包含具有这些访问代码的群组)。如何使用这样的条件过滤器?

只要不存在具有相同 access_code 的多个组,并且它们的行为应该不同(即,如果对于 access_code,应返回具有 access_code 的所有组) :

fq=privacy_type:public OR access_code:(access_code_1 access_code_2 access_code_3)

您还可以明确告诉 Solr 对 access_code 列表中的每个语句进行 OR - access_code:(access_code_1 OR access_code_2 OR ...),但在这种情况下您应该能够删除它。

Solr 的布尔子句的默认最大数量为 1000,因此只要每个用户的访问组数量低于该数量,就可以正常工作。