基于条件的SOLR过滤查询

基于条件的SOLR过滤查询,solr,solarium,Solr,Solarium,我有一个组索引。组有两种隐私类型,公共和私人。专用组与访问代码相关联。在搜索结果中,仅当用户具有关联的访问代码时,才应包括私人组。以前私人组没有显示在搜索结果中,所以我有一个简单的查询!隐私类型:私有 但现在,如果用户拥有该组的访问代码,我必须包括私有组(用户可以有多个访问代码,我们必须包括具有这些访问代码的组)。如何使用这样的条件筛选器?只要没有多个组具有相同的access\u code,并且它们的行为应该不同(即,如果是access\u code,则应返回具有该access\u code的所

我有一个
索引。组有两种隐私类型,公共和私人。专用组与访问代码相关联。在搜索结果中,仅当用户具有关联的访问代码时,才应包括私人组。以前私人组没有显示在搜索结果中,所以我有一个简单的查询
!隐私类型:私有


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

只要没有多个组具有相同的
access\u code
,并且它们的行为应该不同(即,如果是
access\u code
,则应返回具有该
access\u code
的所有组):

您还可以显式地告诉Solr to或
access\u code
列表中的每个语句-
access\u code:(access\u code\u 1或access\u code\u 2或…)
,但在这种情况下,您应该能够删除它


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

只要没有多个组具有相同的
access\u code
,并且它们的行为应该不同(即,如果对于
access\u code
,应返回具有该
access\u code
的所有组):

您还可以显式地告诉Solr to或
access\u code
列表中的每个语句-
access\u code:(access\u code\u 1或access\u code\u 2或…)
,但在这种情况下,您应该能够删除它


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

那么,您如何知道该组是否与访问代码匹配?您如何确定用户具有对该组的显式访问权限?@MatsLindh我正在gro中存储与该组相关的访问代码上传文档。我可以获得用户应用的代码列表。访问代码是否唯一?用户最多应用了多少访问代码?(即,您可以执行
fq=隐私\u类型:公共或访问\u代码:(访问\u代码1访问\u代码2访问\u代码3)
)?@MatsLindh多个组可以有相同的访问代码。虽然用户可以拥有的访问代码数量没有限制,但我们不希望太多。但是用户可以使用相同的访问代码访问所有组?在这种情况下,我上面键入的应该可以工作(默认情况下,Solr配置为允许查询中至少有1000个布尔术语)那么,您如何知道该组是否与访问代码匹配?您如何确定用户对该组具有显式访问权限?@MatsLindh我正在将与该组相关的访问代码存储在组文档中。我可以获取用户已应用的代码列表。访问代码是否唯一?用户最多应用了多少访问代码?(也就是说,你能做到
fq=privacy\u类型:public或access\u code:(access\u code\u 1 access\u code\u 2 access\u code\u 3)
)?@MatsLindh多个组可以有相同的访问代码。虽然用户可以拥有的访问代码数量没有限制,但我们不希望太多。但是用户可以使用相同的访问代码访问所有组?在这种情况下,我上面键入的应该可以工作(默认情况下,Solr配置为允许查询中至少有1000个布尔术语)术语查询解析器可能对上述示例略有改进,还允许更多访问组:术语查询解析器可能对上述示例略有改进,还允许更多访问组:
fq=privacy_type:public OR access_code:(access_code_1 access_code_2 access_code_3)