6

クエリをフィルター処理する方法はありますか? 渡す値を除いて、少なくとも 1 つの他の値を含む特定の配列フィールドを持つドキュメントを取得します。

たとえば、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_array2 と 4 を除いて、少なくとも 1 つの他の値を含むドキュメントが必要です。したがって、結果は次のようになります。

<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 < 2、x が 3 ~ 3、x > 4 の値 x が含まれます。

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 に答える