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

时间:2013-11-13 11:06:59

标签: 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>

我希望文档在my_array中除了2和4之外至少包含一个其他值。 结果将是:

<doc>
  <arr name="my_array">
    <int>4</int>
    <int>3</int>
    <int>1</int>
  </arr>
</doc>

1 个答案:

答案 0 :(得分:4)

你可以尝试

qf=my_array&q=+(2 4) +([* TO 1] [3 TO 3] [5 TO *])

这转换为

  1. my_array应包含2或4个
  2. my_array应包含值x,x < 2,x在3和3之间,x> 4
  3. 我知道between 3 and 3有点奇怪,但这是由于这个例子。

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


    我已经尝试使用 eDisMax ,这是像这样配置的

    <requestHandler name="standard" class="solr.StandardRequestHandler">
        <lst name="defaults">
            <str name="defType">edismax</str>
            <str name="fl">*,score</str>
            <str name="mm">1</str>
        </lst>
    </requestHandler>
    <queryParser name="edismax" 
        class="org.apache.solr.search.ExtendedDismaxQParserPlugin" />