我的每个索引文档都有一个多值字段user_ids_ims
,其中包含与文档相关的用户ID。此字段可能为空。
<types>
<fieldType name="tint" class="solr.IntPointField" omitNorms="true"/>
</types>
<fields>
<dynamicField name="*_ims" type="tint" multiValued="true"/>
</fields>
我希望对user_ids_ims
包含特定ID值的所有文档进行过滤查询,例如42
,或者为空。例如以下文件:
{ id: 'Page 1', user_ids_ims: [] }
{ id: 'Thing 1', user_ids_ims: [19, 24, 92] }
{ id: 'Thing 2', user_ids_ims: [19, 24, 42, 92] }
{ id: 'Thing 7', user_ids_ims: [19, 24, 92] }
如何使用fq
添加包含Page 1
和Thing 2
的文档集?
我可以使用Page 1
fq=!user_ids_ims:[* TO *]
我可以使用Thing 2
fq=user_ids_ims:(42)
答案 0 :(得分:1)
The actual answer is that you combine the two requirements:
fq=user_ids_ims:(42) OR (*:* -user_ids_ims:[* TO *])
The latter *:*
is important, since you have to have a set of documents to subtract the set returned by user_ids_ims:[* TO *]
from. This will give you any documents that have 42
in the field, or do not have the field at all.
答案 1 :(得分:0)
使用user_ids_ims
定义的MySQL列中的值填充AUTO_INCREMENT
字段,因此我知道0
不是有效的id
。有了这些知识,我可以指定:
{ id: 'Page 1', user_ids_ims: [0] }
现在我有2个定义的值要搜索,这很好,即fq=user_ids_ims:(0 42)