5

(他のフィールドの中でも)パーセンテージデータまたは値がnullの場合は-1を含む複数値フィールドを含むSolrドキュメントのセットがあります。

<doc>
    ...
    <arr name="alpha">
        <float>0.23</float>
        <float>0.23</float>
        <float>0.43</float>
    </arr>
    <arr name="beta">
        <float>0.52</float>
        <float>-1.0</float>
        <float>0.34</float>
    </arr>
    <arr name="gamma">
        <float>-1.0</float>
        <float>-1.0</float>
        <float>-1.0</float>
    </arr>
    ...
</doc>

テストケースの完全なセットについて、複数値フィールドに特定のメンバーが含まれている、または含まれていないドキュメントを見つける必要があります。以下のクエリのいずれかを機能させることができれば、数十万から特定のドキュメントを見つけるのに非常に役立ちます。

1)特定の複数値フィールドのメンバーのいずれも特定の基準を満たさないドキュメントを見つけることができますか?(「アルファには-1に一致するメンバーがありません。」とクエリを実行すると、上記のドキュメントが返されます。)

2)特定の複数値フィールドのメンバーの少なくとも1つが特定の基準を満たしているドキュメントを見つけることができますか?(上記のドキュメントは、「アルファには少なくとも1つのメンバー>0」または「ベータには少なくとも1つのメンバー>0」を照会すると返されます。)

フィールドがスカラーではなく配列であるため、のようなクエリはalpha:[0 TO 1]機能しないと思います。「これは不可能です」という決定的な答えは、「これがあなたのやり方です」の答えと同じくらい役に立ちます-事前に感謝します。

編集:多くの問題と同様に、答えは「仮定を再確認する」です。具体的には、ドキュメントを生成した開発者は、パーセンテージフィールドのインデックス作成をオフにしました。

4

2 に答える 2

6
  1. はい。-alpha:"-1.0"これを達成します。

  2. あなた自身の例、alpha:[0 TO 1]が解決策です。

これが機能する理由を簡単に言うと、各フィールドは値や配列ではなく、項のベクトルです。特定の用語のフィールドのクエリは、包含 (または除外) の要求であり、等価操作ではありません。

参照している配列は結果セットの一部であり、検索結果の一部として Solr によって返される単純な保存データです。

于 2010-08-31T16:56:17.097 に答える
2

それは確かに可能です。

私は通常、FQ (フィルタークエリ) パラメーターを使用して、必要なものを取得します: http://wiki.apache.org/solr/CommonQueryParameters#fq

ただし、クエリでそれをスローすることもできます。

#1の解決策:

fq=-alpha:-1.0

アルファが -1.0 に等しいものを除外します

解決策#2についてはわかりません。あなたが言及したコードを試しましたか?

fq=beta:[0.0 TO 1.0]

テストに適したサンプル データセットがありません。

于 2010-08-31T16:51:32.383 に答える