【ES】---La diferencia entre campo y campo.palabra clave

1. Descripción

ElasticSearch5.xy versiones posteriores utilizan texto y palabras clave como tipos de cadenas para reemplazar los tipos de cadenas de versiones anteriores. En la nueva versión, las cadenas se asignarán tanto a tipos de texto como de palabras clave de forma predeterminada.

Cadena (texto) : se utiliza para la indexación de texto completo. Este tipo de campo será segmentado por un segmentador de palabras y finalmente se usará para construir el índice;
Cadena (palabra clave) : no segmentado, solo se puede buscar el valor completo del campo. utilizado para mayor precisión Filtrado y agregación de coincidencias;

-----Observaciones:
Generalmente, los tipos booleanos y numéricos no requieren segmentación de palabras;
además, el tipo Fecha es especial, si agrega @JSONField(name = “file_upload_time”, format = “yyyy-MM-dd HH: mm:ss”) , indicando que la Fecha ha sido convertida según el formato, por lo que para no segmentar las palabras al realizar la consulta es necesario agregar la palabra clave;

2. Ejemplos de código

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);

Supongo que te gusta

Origin blog.csdn.net/xunmengyou1990/article/details/132802181
Recomendado
Clasificación