仅当多值字段上有两个值且没有其他值时才匹配的Solr查询
类似这样的查询:仅当多值字段上有两个值且没有其他值时才匹配的Solr查询,solr,Solr,类似这样的查询: &q=im_field_teams:(4667 AND 4675) docs: [ { im_field_teams: [ 4675, 4667 ] }, { im_field_teams: [ 4660, 4702, 4675, 4667, 4684, ] } 将返回如下结果: &q=im_field_teams:(4667 AND 4675) docs: [ { im_fie
&q=im_field_teams:(4667 AND 4675)
docs: [
{
im_field_teams: [
4675,
4667
]
},
{
im_field_teams: [
4660,
4702,
4675,
4667,
4684,
]
}
将返回如下结果:
&q=im_field_teams:(4667 AND 4675)
docs: [
{
im_field_teams: [
4675,
4667
]
},
{
im_field_teams: [
4660,
4702,
4675,
4667,
4684,
]
}
太棒了!当然,我也会得到这样的值:
&q=im_field_teams:(4667 AND 4675)
docs: [
{
im_field_teams: [
4675,
4667
]
},
{
im_field_teams: [
4660,
4702,
4675,
4667,
4684,
]
}
这正是我想要避免的
我想要一个“只有”或“没有”之类的。在多值字段中仅包含一对值(不多,不少)的匹配文档
(值得一提的是:似乎有效,但感觉真的错了。)
没有直接的方法可以做到这一点。但是有一些变通方法/可能的选项可以完成(见下文),但查询语法可能更简单。如果有重叠的范围和多个and子句,使用否定的查询有时会变得棘手 在索引期间,在多值字段中添加另一个具有数组大小的字段。例如,如果文档有(466047024674684),则此字段的大小将为5。在查询时间中,根据要添加的条目数包括此字段。在这种情况下,如果您正在搜索
q=im\u field\u teams:(4667和4675)
则添加另一个子句和im\u field\u teams\u size:2
条件。这将确保所有条款都匹配,并且只有那些条款匹配