【问题标题】:Solr query to filter document with at least one value in array except of specified valuesSolr查询以过滤除指定值外的数组中至少有一个值的文档
【发布时间】:2013-11-13 11:06:59
【问题描述】:

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

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

【问题讨论】:

    标签: arrays solr filter multivalue


    【解决方案1】:

    你可以试试

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

    这翻译成

    1. my_array 应包含 2 或 4
    2. my_array 应包含一个值 x,其中 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" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-23
      • 2018-12-08
      • 1970-01-01
      • 2021-09-23
      • 2019-06-22
      • 2021-08-07
      • 2019-06-21
      • 2021-10-15
      相关资源
      最近更新 更多