Solr查询过滤除了指定值之外的数组中至少有一个值的文档

fid*_*der 6 arrays solr filter multivalue

有没有办法过滤查询,所以我将获得具有特定数组字段的文档,其中包含至少一个其他值,除了我传递的值.

例如,我有3个文档.

<doc>
  <arr name="my_array">
    <int>2</int>
    <int>4</int>
  </arr>
</doc>

<doc>
  <arr name="my_array">
    <int>2</int>
  </arr>
</doc>

<doc>
  <arr name="my_array">
    <int>4</int>
    <int>3</int>
    <int>1</int>
  </arr>
</doc>
Run Code Online (Sandbox Code Playgroud)

我想要my_array除了2和4之外至少包含一个其他值的文档.因此结果将是:

<doc>
  <arr name="my_array">
    <int>4</int>
    <int>3</int>
    <int>1</int>
  </arr>
</doc>
Run Code Online (Sandbox Code Playgroud)

che*_*ffe 4

你可以试试

qf=my_array&q=+(2 4) +([* TO 1] [3 TO 3] [5 TO *])
Run Code Online (Sandbox Code Playgroud)

这翻译成

  1. my_array 应包含 2 或 4
  2. my_array 应包含值 x,其中 x < 2、x 在 3 和 3 之间、x > 4

我知道这between 3 and 3有点奇怪,但这是由于这个例子造成的。

需要注意的是,您需要在客户端计算查询以获得正确的范围子句。尽管计算这个的逻辑并不太难。


我已经用eDisMax尝试过,它的配置如下

qf=my_array&q=+(2 4) +([* TO 1] [3 TO 3] [5 TO *])
Run Code Online (Sandbox Code Playgroud)