我的每个索引文档都有一个多值字段user_ids_ims
,其中包含与文档相关的用户ids。这个字段可能是空的。
<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)
发布于 2018-04-10 17:56:34
实际的答案是将这两项要求结合在一起:
fq=user_ids_ims:(42) OR (*:* -user_ids_ims:[* TO *])
后一个*:*
很重要,因为您必须有一组文档来减去user_ids_ims:[* TO *]
返回的集合。这将为您提供字段中有42
或根本没有字段的任何文档。
发布于 2018-04-10 17:30:30
user_ids_ims
字段使用用AUTO_INCREMENT
定义的MySQL列的值填充,因此我知道0
不是有效的id
。有了这些知识,我可以分配:
{ id: 'Page 1', user_ids_ims: [0] }
现在我有两个定义的值要搜索,这是很好的,即fq=user_ids_ims:(0 42)
https://stackoverflow.com/questions/49759435
复制相似问题