1

「room」という名前の親ドキュメントと、「age」フィールドを持つ「person」という名前の子ドキュメントがあるとします。ここで、ES で custom_score クエリを使用して age フィールドを使用していくつかの部屋にスコアを付けたいと考えています。

私はすでにクエリをほぼ期待どおりに機能させていますが、唯一の問題は、空の部屋 (子ドキュメントがない) がスコアリングされないことです。どうすればデフォルトのスコアか何かを与えることができますか? この例では、room_id が 1 ~ 5 の 5 つの部屋にスコアを付けたいと考えています。ルーム 4 に子ドキュメントがない場合、採点されません。クエリは、期待されるスコアを持つ 4 つのレコードのみにヒットします。私が欲しいのは、空の部屋にデフォルトのスコアを与えることです。この場合は関数スコア クエリが適しているかもしれませんが、現在関数スコア クエリをサポートしていない .NET クライアントとして NEST を使用しています。

ところで: SO の CSS はここでは機能していません。理由はわかりません。この投稿が適切にフォーマットされていない場合は、編集にご協力ください。ありがとうございます。

{
  "query": {
    "custom_score": {
      "script": "_score",
      "query": {
        "filtered": {
          "query": {
            "has_child": {
              "type": "person",
              "score_type": "sum",
              "query": {
                "custom_score": {
                  "script": "doc['person.age'].value - 50d",
                  "query": {
                    "match_all": {}
                  }
                }
              }
            }
          },
          "filter": {
            "bool": {
              "should": [
                {
                  "terms": {
                    "room_id": [ "1", "2", "3", "4", "5" ]
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}
4

1 に答える 1