【ES】---フィールドとフィールドキーワードの違い

1. 説明

ElasticSearch5.x 以降では、テキストとキーワードを文字列タイプとして使用して、以前のバージョンの文字列タイプを置き換えます。新しいバージョンでは、文字列はデフォルトでテキスト タイプとキーワード タイプの両方にマッピングされます。

文字列 (テキスト) : 全文インデックス作成に使用されます。このタイプのフィールドは単語セグメンタによってセグメント化され、最終的にインデックスの構築に使用されます。
文字列 (キーワード) : セグメント化されず、フィールドの完全な値のみが検索できます。精度の一致フィルタリングと集計に使用されます。

-----備考:
一般に、ブール型と数値型には単語の分割は必要ありません。
さらに、 @JSONField(name = “file_upload_time”, format = “yyyy-MM-dd HH: mm:ss”) は、日付が形式に従って変換されていることを示します。そのため、クエリ時に単語が分割されないようにするために、キーワードを追加する必要があります。

2. コード例

BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder()
        .must(QueryBuilders.termQuery("delete", Boolean.FALSE)) //Boolean类型
        .must(QueryBuilders.termQuery("sid", 1111L))  //Long类型
        .must(QueryBuilders.existsQuery("type.relegation_id")) //type为数组,relegation_id为string
        .mustNot(QueryBuilders.termQuery("type.relegation_id.keyword", ""))
.must(QueryBuilders.rangeQuery("create_time.keyword").from("2022-01-01 00:00:01").to("2023-07-23 00:00:06")); //create_time是Date类型,加了format

StatsAggregationBuilder metricAggre = AggregationBuilders.stats("metric").field("file_size");
AggregationBuilder subAgg = AggregationBuilders.terms("group_by_extension")
        .script(new Script("doc['w_extension.keyword'].value.toUpperCase()")).size(Integer.MAX_VALUE);
subAgg.subAggregation(metricAggre);
AggregationBuilder aggregationBuilder = AggregationBuilders.terms("group_by_base_id").field("type.relegation_id.keyword").size(Integer.MAX_VALUE);
aggregationBuilder.subAggregation(subAgg);

おすすめ

転載: blog.csdn.net/xunmengyou1990/article/details/132802181