ElasticSearch クエリを作成しようとしていますが、期待した結果が得られません。どんな助けでも本当に感謝します!
マッピングの詳細:
ボランティアの機会を表す文書を索引付けしました。各オポチュニティには、次のフィールドがあります。
- oppのタイトル、
- まとめ、
- 承認ステータス、および
- プライバシー設定。
さらに、各オポチュニティ ドキュメントには次のものがあります。
- ボランティア機会の非営利ホストを表す 1 つのネストされた非営利ドキュメント
- 機会によって対処される原因を表す 1 つ以上のネストされた原因ドキュメント、
- ボランティアに必要なスキルを表す 0 個以上のネストされたスキル ドキュメント、および
- ボランティアがサインアップできる期間を表す、0 個以上のネストされたシフト ドキュメント。
ネストされた各シフト ドキュメントには、現時点では、開始日時フィールドと終了日時フィールド、およびそのシフトにサインアップできるボランティアの最大数のフィールドを持つ 1 つのネストされた calendarBlock ドキュメントが含まれています。
クエリ
作成しようとしているクエリは、フィルター処理されたクエリです。Web 上のフォームからクエリ文字列が渡されます。次に、少なくとも 3 つのフィルターをプログラムでこのクエリにアタッチする必要があります。
- 「承認済み」が「y」の商談のみを返す条件フィルター
- "private" : "n" を含む商談のみを返す条件フィルター
- 現在の日付/時刻より大きい calendarBlock end フィールドを持つ少なくとも 1 つのシフトを持つ商談のみを返す範囲フィルター。(IE: 過去のすべてのシフトを除外します。)
最初の 2 つのフィルターは正常に機能しています。3 つ目は、私が立ち往生している場所です。問題は、複雑な入れ子構造に関係しているのではないかと思います。ネストされたフィルターを試しましたが、これが正しく行われたかどうかわかりません。また、日付フィールドは実際には 2 レベルの深さでネストされています。クエリを実行しても、過去のシフトで結果が得られます。
将来のシフトがスケジュールされていないすべての機会を除外する適切な方法は何ですか?