6

_searchフィールドに特定の価値がある文書を作成しようとしています。

{
  "query": {
      "bool": {
        "must": [
         {"field": {"advs.status": "warn"}}
       ]
      }
  }
}

それはうまくいきます。しかし、そのフィールドに空の文字列があるドキュメントを検索しようとすると、次のエラーが発生します。

ParseException[Cannot parse '' ...

そして - 空の文字列の代わりに期待されるものの長いリスト。

私はこのクエリを試します:

{
  "query": { 
    "bool": {
        "must": [
            {"term": {"advs.status": ""}}
         ]
        }
  }
}

失敗はしませんが、何も見つかりません。代わりに、空でない文字列に対して機能します。どうすればいいですか?

このタイプのマッピングは、次のようになります。

{
    "reports": {
        "dynamic": "false",
        "_ttl": {
            "enabled": true,
            "default": 7776000000
        },
        "properties": {
            "@fields": {
                "dynamic": "true",
                "properties": {
                    "upstream_status": {
                        "type": "string"
                    }
                }
            },
            "advs": {
                "properties": {
                    "status": {
                        "type": "string",
                        "store": "yes"
                    }
                }
            },
            "advs.status": {
                "type": "string",
                "store": "yes"
            }
        }
    }
}
4

6 に答える 6

6

または、同じことをより効率的に行う別の方法は、existsフィルターを使用することです。

"exists" : {
  "field" : "advs.status"
}

どちらも有効ですが、こちらの方が優れています:)

于 2013-08-09T17:28:36.363 に答える
2

機能するが最適ではないこの一時的な解決策を試すことができます - https://github.com/elastic/elasticsearch/issues/7515

PUT t/t/1
{
"textContent": ""
}

PUT t/t/2
{
 "textContent": "foo"
}

GET t/t/_search
{
 "query": {
  "bool": {
   "must": [
    {
      "exists": {
        "field": "textContent"
      }
    }
  ],
  "must_not": [
    {
      "wildcard": {
        "textContent": "*"
      }
     }
   ]
  }
 }
}
于 2017-12-08T05:50:41.533 に答える
1

で使用must_notしてみてmissingくださいbool

"must_not":{
  "missing":{
    "field":"advs.status",
    "existence":true,
    "null_value":true
  }
}
于 2013-08-09T17:21:35.770 に答える
0

「欠落」は null 値に対してのみ機能するか、まったく存在しません。一致する空の文字列はすでにここで回答されています: https://stackoverflow.com/a/25562877/155708

于 2015-04-10T09:32:04.890 に答える