Solr查询仅在2个值与多值字段上没有其他值时匹配

时间:2014-04-17 22:31:24

标签: solr

像这样的查询:

&q=im_field_teams:(4667 AND 4675)

将返回如下结果:

docs: [
{
  im_field_teams: [
    4675,
    4667
  ]
},

哪个好极了!当然,我也得到这样的价值观:

{
  im_field_teams: [
    4660,
    4702,
    4675,
    4667,
    4684,
  ]
}

这正是我试图避免的。

我想要一个"只有"或AND AND NOT *或类似的东西。匹配在多值字段中仅包含一对值(不多,不少)的文档。

(对于它值得这样做:似乎有效,但感觉非常错误。)

&q=im_field_teams:(4667 AND 4675) -im_field_teams:[0 TO 4666] -im_field_teams:[4668 TO 4674] -im_field_teams:[4676 TO *]

1 个答案:

答案 0 :(得分:0)

没有直接的方法可以做到这一点。但是可以使用变通方法/可能的选项(见下文),但可能有更简单的查询语法。如果我们有重叠的范围和多个AND子句,那么带有否定的查询有时会变得棘手。

在索引期间,在多值字段中添加另一个具有数组大小的字段。例如,如果文档具有(4660,4702,4675,4667,4684),则此字段的大小为5.在查询时,根据要添加的条目数包括此字段。在这种情况下,如果您要搜索q=im_field_teams:(4667 AND 4675),请添加另一个条款AND im_field_teams_size:2条件。这将确保所有条款匹配且那些。