ElasticSearch Javaクエリあるフィールドがnullでも空でもないエントリ


最近、あるフィールドがnullでも「」でもないことをクエリーする必要があるが、ネット上にはESクエリーの一部のフィールドがnullと「」であることに関するブログがたくさんあり、検討してみると、3つの案があることが分かった.
シナリオ1:existsQueryキーを使用して、nullの値を持つフィールドがあるエントリをクエリーしますが、「」の値を持つフィールドはフィルタできません.

        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        List<QueryBuilder> must = boolQueryBuilder.must();

        must.add(QueryBuilders.boolQuery().must((QueryBuilders.existsQuery("    "))));


シナリオ2:wildcardQueryキーワードの使用
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        List<QueryBuilder> must = boolQueryBuilder.must();
        
        //      , :      
	    must.add(QueryBuilders.wildcardQuery("    ", "*"));


シナリオ3:ASCIIコードを用いて比較すると、まずnullのASCIIは0、スペースのASCIIは32、空文字のASCIIも0( )のようで、このとき範囲で比較することができます.
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        List<QueryBuilder> must = boolQueryBuilder.must();

        RangeQueryBuilder range = QueryBuilders.rangeQuery("    ");
		
		//ASCII   0(   0 ,    ""       ,   "" ASCII   0   )
		range.gt(0);
		
		must.add(range);

補足:
1.シナリオ1は最良のシナリオです.ESでは、あるフィールドの値がnullで表示されません.「」であれば表示されます.問題はここにあります.シナリオは良いが、要求に合わないので、ESにデータを追加するときは、 に違いありません.疑いのないときは自分に迷惑をかけるからです.
2.シナリオ2はあいまいなクエリーで、 の効率が最も低く、クエリーに最もリソースがかかります.私が今使っているのはこれです.私は5000万近くのデータの中でクエリーに問題がないので、戻る速度も50ミリ秒以上(ページをめくった)で、高い同時状況でどうなるか分からないので、後で問題が発生したらみんなに報告します.
3.シナリオ3はASCIIコードを利用して範囲照会を行い、速度に問題はなく、高同時性の場合もテストはない.