• 【ES】---field、field.keyword的区别


    一、说明

    ElasticSearch5.x以上版本使用text和keyword作为字符串类型取代之前版本的string类型。新版本字符串将默认被同时映射成text和keyword类型。

    字符串(text):用于全文索引,该类型的字段将通过分词器进行分词,最终用于构建索引;
    字符串(keyword):不分词,只能搜索该字段的完整的值,用于精准匹配过滤和聚合;

    -----备注说明:
    一般Boolean、数值类型不需要分词;
    另外,Date类型特殊,如果加上 @JSONField(name = “file_upload_time”, format = “yyyy-MM-dd HH:mm:ss”),表明将Date按照format形式转换了,因此在查询时为了不分词,需要加上keyword;

    二、代码示例

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    如何使用 Tokenview NFT API进行 NFT 钱包的开发?
    十进制分钟转时间类型
    卡巴斯基plus(kaspersky plus) 21.16主界面出不来
    Zabbix 5.0 监控教程(三)
    js的宏任务与微任务
    中英文说明书丨CalBioreagents艾美捷重组Ku-p70/p80蛋白
    适用于Linux的6个最佳Python IDE
    课程:如何高效掌控你的时间
    virsh命令使用笔记
    线性DP算法的实现
  • 原文地址:https://blog.csdn.net/xunmengyou1990/article/details/132802181