4

Elasticsearch で検索するときに、カスタム スコアリング スクリプトにフィールドが存在するかどうかを確認したいと思います。

この検索は次のように機能します。

{
  "query": {
    "custom_score": {
      "script": "((doc['region'].value == '1') ? 1 : 0)",
      "query": {
        "constant_score": {
          "filter": {
            "and": [
              {
                "term": {
                  "id": "100"
                }
              }
            ]
          }
        }
      }
    }
  },
  "size": 1
}

地域フィールドの値が 1 の場合、結果は 1 とスコア付けされます。

ただし、このクエリは機能しません。ドキュメントに地域フィールドが存在しない場合、ドキュメントのスコアは 1 になりません。

{
  "query": {
    "custom_score": {
      "script": "((doc['region'].value == null) ? 1 : 0)",
      "query": {
        "constant_score": {
          "filter": {
            "and": [
              {
                "term": {
                  "id": "100"
                }
              }
            ]
          }
        }
      }
    }
  },
  "size": 1
}

スクリプトで欠損値を確認するにはどうすればよいですか?

4

1 に答える 1

14

このフィールドが数値型であり、長いインデックスが付けられた日付を含む場合、欠損値は 0 で表されます。

于 2012-10-26T20:37:06.460 に答える