Algunos pequeños detalles dignos de mención sobre el mapeo en Elasticsearch

Introducción

Hay muchos lugares para configurar el mapeo en Elasticsearch, pero si lo usa demasiado, encontrará que, en general, los aspectos más comunes y prácticos del mapeo son simples a los que se debe prestar atención.

A continuación, se ofrece una breve introducción sobre los aspectos notables de estas asignaciones.

Por supuesto, si desea saber más sobre la cartografía, puede consultar el enlace de referencia que se proporciona más adelante.

Agregar mapeo

# 添加为索引添加mapping
curl -X PUT http://localhost:9200/index-name/_mapping
# 查看索引的mapping
curl -X GET http://localhost:9200/index-name/_mapping

Aquí está la parte del cuerpo de agregar mapeo:

{
    
    
  "mappings": {
    
    
      "dynamic": "strict",
      "properties": {
    
    
        "title": {
    
    
          "type": "text",
          "norms":false,
          "doc_values":false
        },
        "name": {
    
    
          "type": "keyword"
        },
        "attach": {
    
    
          "type": "text",
          "enable":false
        }
      }
  }
}

En el mapeo, se recomienda que el parámetro dinámico se establezca en "estricto", de modo que cuando haya campos en el documento agregado que no estén en el mapeo, se puedan obtener excepciones. Por supuesto, no importa si solo desea tener más campos, puede establecer dynamic en falso, por lo que los campos que no están en el mapeo serán ignorados.

La dinámica predeterminada es verdadera. Si hay campos en el documento que no están en el mapeo, los campos correspondientes se agregarán al mapeo y se hará la inferencia de tipo. Aunque este es el más conveniente, no es propicio para el mantenimiento.

Parámetros que vale la pena considerar en el campo:

  1. Si no necesita ordenar, los doc_values ​​agregados deben establecerse en falso, como correo electrónico, nombre de usuario, etc.
  2. Para el tipo de texto, si no necesita participar en la puntuación, es mejor establecer las normas en falso
  3. Si solo almacena y no desea buscar en el campo, habilitar se puede establecer en falso
  4. Si necesita que el campo participe en la puntuación, pero no segmenta el campo, puede establecer el índice en falso

Actualizar mapeo

curl -X PUT http://localhost:9200/index-name/_mapping
{
    
    
  "properties": {
    
    
    "gid": {
    
    
      "type": "text",
      "index": false
    }
  }
}

El mapeo para la actualización del índice también utiliza PUT. Los puntos a destacar son:

  1. El mapeo no puede eliminar ni modificar campos y parámetros, solo agregar campos y parámetros
  2. A diferencia de agregar mapeo, actualizar mapeo, no hay mapeo en la capa más externa, comience directamente desde las propiedades

Si no necesita establecer una plantilla dinámica, dinámica y otros parámetros, también puede comenzar directamente desde las propiedades al agregar la asignación

Manera de Java para agregar mapeo

@Test
public void addMapping() throws Exception {
    
    
    HttpHost httpHostOne = new HttpHost("127.0.0.1", 9200, "http");
    RestClientBuilder builder = RestClient.builder(httpHostOne);
    RestHighLevelClient client = new RestHighLevelClient(builder);
    String indexName = "index-name";
    IndicesClient indicesClient = client.indices();
//        mapping是针对索引,所以先添加索引,当然也可以在添加索引的时候就设置
    CreateIndexRequest createIndexRequest = new CreateIndexRequest(indexName).settings(getDefaultSetting());
    indicesClient.create(createIndexRequest, RequestOptions.DEFAULT);

    XContentBuilder mapping = XContentFactory.jsonBuilder()
            .startObject()
            .startObject("properties")
            .startObject("gid").field("type", "keyword").field("doc_values",false).endObject()
            .startObject("serverId").field("type", "integer").endObject()
            .endObject()
            .endObject();
    PutMappingRequest putMappingRequest = new PutMappingRequest(indexName).source(mapping);
    indicesClient.putMapping(putMappingRequest, RequestOptions.DEFAULT);
}

private static Settings getDefaultSetting(){
    
    
    return Settings.builder()
            .put("index.refresh_interval", "60s")
            .put("index.number_of_shards", "3")
            .put("index.number_of_replicas", "1")
            .build();
}

referencia

Plantilla de asignación de
mapas

Supongo que te gusta

Origin blog.csdn.net/trayvontang/article/details/107919853
Recomendado
Clasificación