6

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

例如,我有 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>

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

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

1 回答 1

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

我知道这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" />
于 2013-11-13T13:41:31.013 回答