Elasticsearch7.6 notas de estudio 1 Introducción a Elasticsearch

Elasticsearch7.6 notas de estudio 1 Introducción a Elasticsearch

Prólogo

La guía autorizada en chino es solo 2.x, pero ahora ha alcanzado 7.6. Instale lo último para aprender.

Instalar

Aquí está la instalación de aprendizaje, la instalación de producción es otro conjunto de lógica.

ganar

es dirección de descarga:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-windows-x86_64.zip

Dirección de descarga de Kibana:

https://artifacts.elastic.co/downloads/kibana/kibana-7.6.0-windows-x86_64.zip

La última versión oficial actual es 7.6.0, pero la velocidad de descarga es terrible. El uso de la velocidad de descarga de Thunder puede alcanzar xM.

bin\elasticsearch.bat
bin\kibana.bat

Haz doble clic en bat para comenzar.

instalación de estibador

Para las pruebas y el aprendizaje, es más rápido y más conveniente usar directamente la imagen oficial del acoplador.

Consulte el método de instalación: https://www.cnblogs.com/woshimrf/p/docker-es7.html

Lo siguiente es de:

https://www.elastic.co/guide/en/elasticsearch/reference/7.6/getting-started.html

Indexar algunos documentos

Esta prueba utiliza kibana directamente, por supuesto, también puede visitar localhost: 9200 a través de curl o cartero.

Visite localhost: 5601 y luego haga clic en Herramientas de desarrollo.

Crear un nuevo índice de clientes (índice)

PUT / {index-name} / _ doc / {id}

PUT /customer/_doc/1
{
  "name": "John Doe"
}

putEs http método, si no existe un índice (index) ES en customer, crear un e insertar un dato, ida , name = John`.
Si no se actualiza. Tenga en cuenta que las actualizaciones se actualizan cobertura que es lo JSON cuerpo, el resultado final es Que.

El regreso es el siguiente:

{
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 7,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 6,
  "_primary_term" : 1
}

  • _index Es el nombre del índice
  • _type Solo para_doc
  • _id Es la clave principal del documento, que es el paquete de un registro
  • _versionEs la _idcantidad de actualizaciones, he actualizado 7 veces aquí
  • _shards Representa el resultado de la fragmentación. Hemos implementado un total de dos nodos aquí, y ambos se han escrito con éxito.

Puede verificar el estado del índice en la administración de índice en kibana. Por ejemplo, nuestro registro tiene dos fragmentos principales y dos.

Una vez que el registro se haya guardado correctamente, se puede leer de inmediato:

GET /customer/_doc/1

Volver

{
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 15,
  "_seq_no" : 14,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "John Doe"
  }
}

  • _source Es lo que grabamos

Inserto a granel

Cuando hay que insertar varios datos, podemos insertarlos en lotes. Descargue los documentos preparados y luego importe a través de la solicitud HTTP.

Cree un banco de índice: dado que los fragmentos (fragmentos) y las réplicas (réplicas) no se pueden modificar después de crearlos, configure los fragmentos al crearlos primero. Hay 3 fragmentos y 2 réplicas.

PUT /bank
{
  "settings": {
    "index": {
      "number_of_shards": "3",
      "number_of_replicas": "2"
    }
  }
}

Dirección del documento: https://gitee.com/mirrors/elasticsearch/raw/master/docs/src/test/resources/accounts.json

Después de la descarga, el comando curl o el cartero envía una solicitud de archivo

curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@accounts.json"
curl "localhost:9200/_cat/indices?v"

El formato de cada registro es el siguiente:

{
  "_index": "bank",
  "_type": "_doc",
  "_id": "1",
  "_version": 1,
  "_score": 0,
  "_source": {
    "account_number": 1,
    "balance": 39225,
    "firstname": "Amber",
    "lastname": "Duke",
    "age": 32,
    "gender": "M",
    "address": "880 Holmes Lane",
    "employer": "Pyrami",
    "email": "[email protected]",
    "city": "Brogan",
    "state": "IL"
  }
}

Seleccione self monitor en kibana monitor y luego busque el banco de índices en índices. Puede ver la distribución de los datos que importamos.

Como puede ver, hay 3 fragmentos en diferentes nodos, y hay 2 réplicas.

Iniciar consulta

Después de insertar algunos datos en lotes, podemos comenzar a aprender a consultar. Como sabemos anteriormente, los datos son la tabla de empleados del banco. Consultamos a todos los usuarios y los clasificamos de acuerdo con los números de cuenta.

Similar a sql

select * from bank order by  account_number asc limit 3

Consulta DSL


GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ],
  "size": 3,
  "from": 2
}
  • _search Consulta expresa
  • query Es la condición de consulta, aquí están todos
  • sizeRepresenta el número de cada consulta, el número de páginas. Si no se transmite, el valor predeterminado es 10. hitsSe muestra en los resultados devueltos .
  • fromIndica desde qué número

Devoluciones:


{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1000,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "bank",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : null,
        "_source" : {
          "account_number" : 2,
          "balance" : 28838,
          "firstname" : "Roberta",
          "lastname" : "Bender",
          "age" : 22,
          "gender" : "F",
          "address" : "560 Kingsway Place",
          "employer" : "Chillium",
          "email" : "[email protected]",
          "city" : "Bennett",
          "state" : "LA"
        },
        "sort" : [
          2
        ]
      },
      {
        "_index" : "bank",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "account_number" : 3,
          "balance" : 44947,
          "firstname" : "Levine",
          "lastname" : "Burks",
          "age" : 26,
          "gender" : "F",
          "address" : "328 Wilson Avenue",
          "employer" : "Amtap",
          "email" : "[email protected]",
          "city" : "Cochranville",
          "state" : "HI"
        },
        "sort" : [
          3
        ]
      },
      {
        "_index" : "bank",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : null,
        "_source" : {
          "account_number" : 4,
          "balance" : 27658,
          "firstname" : "Rodriquez",
          "lastname" : "Flores",
          "age" : 31,
          "gender" : "F",
          "address" : "986 Wyckoff Avenue",
          "employer" : "Tourmania",
          "email" : "[email protected]",
          "city" : "Eastvale",
          "state" : "HI"
        },
        "sort" : [
          4
        ]
      }
    ]
  }
}



El resultado devuelto proporciona la siguiente información

  • took es tiempo de consulta, la unidad es milisegundos
  • timed_out si la búsqueda ha expirado
  • _shardsCuánto hemos buscado, cuánto hemos shardstenido éxito, cuánto hemos fallado, cuánto hemos omitido. Acerca del fragmento, simplemente se entiende como fragmentación de datos, es decir, los datos en un índice se dividen en varias partes, que se pueden entender como división de tabla por id.
  • max_score Puntuación del documento más relevante

A continuación, puede intentar una consulta condicional.

Búsqueda de palabras

Consulta la dirección con millsuma laneen dirección.

GET /bank/_search
{
  "query": { "match": { "address": "mill lane" } },
  "size": 2
}

Volver

{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 19,
      "relation" : "eq"
    },
    "max_score" : 9.507477,
    "hits" : [
      {
        "_index" : "bank",
        "_type" : "_doc",
        "_id" : "136",
        "_score" : 9.507477,
        "_source" : {
          "account_number" : 136,
          "balance" : 45801,
          "firstname" : "Winnie",
          "lastname" : "Holland",
          "age" : 38,
          "gender" : "M",
          "address" : "198 Mill Lane",
          "employer" : "Neteria",
          "email" : "[email protected]",
          "city" : "Urie",
          "state" : "IL"
        }
      },
      {
        "_index" : "bank",
        "_type" : "_doc",
        "_id" : "970",
        "_score" : 5.4032025,
        "_source" : {
          "account_number" : 970,
          "balance" : 19648,
          "firstname" : "Forbes",
          "lastname" : "Wallace",
          "age" : 28,
          "gender" : "M",
          "address" : "990 Mill Road",
          "employer" : "Pheast",
          "email" : "[email protected]",
          "city" : "Lopezo",
          "state" : "AK"
        }
      }
    ]
  }
}

  • Me puse a devolver 2, pero en realidad llegué a 19

Consulta de coincidencia exacta

GET /bank/_search
{
  "query": { "match_phrase": { "address": "mill lane" } }
}

En este momento, solo hay uno que coincide exactamente.

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 9.507477,
    "hits" : [
      {
        "_index" : "bank",
        "_type" : "_doc",
        "_id" : "136",
        "_score" : 9.507477,
        "_source" : {
          "account_number" : 136,
          "balance" : 45801,
          "firstname" : "Winnie",
          "lastname" : "Holland",
          "age" : 38,
          "gender" : "M",
          "address" : "198 Mill Lane",
          "employer" : "Neteria",
          "email" : "[email protected]",
          "city" : "Urie",
          "state" : "IL"
        }
      }
    ]
  }
}

Consulta de múltiples condiciones

En la consulta real, generalmente se consultan varias condiciones juntas

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}
  • boolSe usa para combinar múltiples condiciones de consulta
  • must, should, must_notEs una consulta booleana subsentencia must, shoulddeterminar la relevancia puntuación, la puntuación de acuerdo con el resultado de la ordenación por defecto
  • must notSe utiliza como filtro para afectar los resultados de la consulta, pero no afecta la puntuación, sino que solo filtra los resultados.

También puede especificar cualquier filtro explícitamente para incluir o excluir documentos basados ​​en datos estructurados.

Por ejemplo, consulte el saldo entre 20,000 y 30,000.

GET /bank/_search
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}

Grupo de operaciones agregadas por

Estadísticas por provincia

De acuerdo con la redacción de SQL, puede ser

select state AS group_by_state, count(*) from tbl_bank limit 3;

La solicitud correspondiente a es es


GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "size": 3
      }
    }
  }
}
  • size=0Es limitar el contenido devuelto, ya que es devolverá los registros de la consulta, solo queremos agregar valores
  • aggsEs una palabra gramatical agregada
  • group_by_state Es un resultado de agregación, el nombre está personalizado
  • terms Los campos de la consulta coinciden exactamente, aquí están los campos que deben agruparse
  • state.keywordel estado es un texttipo, el tipo de caracteres necesita estadísticas y agrupación, el tipo debe ser una palabra clave
  • size=3Limite el número devuelto por el grupo, aquí está top3, top10 predeterminado, el máximo del sistema es 10000, se puede lograr mediante modificación search.max_buckets, tenga en cuenta que múltiples fragmentos producirán problemas de precisión y luego aprenderá en profundidad más adelante

Valor de retorno:

{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1000,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "group_by_state" : {
      "doc_count_error_upper_bound" : 26,
      "sum_other_doc_count" : 928,
      "buckets" : [
        {
          "key" : "MD",
          "doc_count" : 28
        },
        {
          "key" : "ID",
          "doc_count" : 23
        },
        {
          "key" : "TX",
          "doc_count" : 21
        }
      ]
    }
  }
}


  • hitsHaga clic en el registro de la condición de consulta, ya que size = 0 está establecido, regresa []. totalEsta consulta alcanzó 1000 registros
  • aggregations Es el resultado del indicador agregado
  • group_by_state Es el nombre de la variable nombrado en nuestra consulta
  • doc_count_error_upper_bound No hay ningún resultado de agregación potencial devuelto en esta agregación, pero puede haber un resultado de agregación potencial. El nombre de la clave significa "límite superior", lo que significa que el valor del resultado final no se calcula en el peor de los casos estimados, por supuesto, el valor de doc_count_error_upper_bound Cuanto mayor sea el valor, mayor será la posibilidad de que los datos finales sean inexactos. Lo que se puede determinar es que su valor es 0, lo que indica que los datos son completamente correctos, pero no es 0, lo que no significa que los datos agregados sean incorrectos.
  • sum_other_doc_count El número de documentos que no se contaron en la agregación

Vale la pena señalar que top3 es exacto. Vemos doc_count_error_upper_boundque hay un número incorrecto, es decir, el resultado estadístico es probable que sea inexacto, y el top3 obtenido es 28, 23, 21. Agregaremos otro parámetro de consulta para comparar El resultado:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "size": 3,
        "shard_size":  60
      }
    }
  }
}
-----------------------------------------
  "aggregations" : {
    "group_by_state" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 915,
      "buckets" : [
        {
          "key" : "TX",
          "doc_count" : 30
        },
        {
          "key" : "MD",
          "doc_count" : 28
        },
        {
          "key" : "ID",
          "doc_count" : 27
        }
      ]
    }
  }
  • shard_sizeRepresenta el número de cálculos para cada fragmento. Debido a que la operación de agregación agg calcula un resultado para cada fragmento, y luego agrega el resultado final. Los datos se distribuyen de manera desigual en los fragmentos, y la parte superior N de cada fragmento no es el mismo, solo Es posible que el resultado de agregación final sea un poco menor. Por lo tanto, no es doc_count_error_upper_bound0. El shard_sizevalor predeterminado de es es size*1.5+10que size = 3 corresponde a 14.5, verificando que el valor de retorno cuando shar_size = 14.5 es de hecho el mismo que no pasa. Cuando se establece en 60, el error es finalmente Es 0, es decir, se puede garantizar que estos 3 son definitivamente los más importantes 3. Es decir, la operación de agregación debería establecer shard_size lo más grande posible, como 20 veces el tamaño.

Cuente la cantidad de personas por provincia y calcule el salario promedio

Queremos verificar el salario promedio de cada provincia, sql puede ser

select 
  state, avg(balance) AS average_balance, count(*) AS group_by_state 
from tbl_bank
group by state
limit 3

Puede consultar en es así:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "size": 3,
        "shard_size":  60
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        },
        "sum_balance": {
          "sum": {
            "field": "balance"
          }
        }
      }
    }
  }
}
  • El segundo aggses calcular el índice de agregación de cada estado
  • average_balanceNombre de la variable personalizada, el valor es la avgoperación de equilibrio del mismo estado
  • sum_balanceNombre de la variable personalizada, el valor es la sumoperación de equilibrio del mismo estado

El resultado es el siguiente:

{
  "took" : 12,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1000,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "group_by_state" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 915,
      "buckets" : [
        {
          "key" : "TX",
          "doc_count" : 30,
          "sum_balance" : {
            "value" : 782199.0
          },
          "average_balance" : {
            "value" : 26073.3
          }
        },
        {
          "key" : "MD",
          "doc_count" : 28,
          "sum_balance" : {
            "value" : 732523.0
          },
          "average_balance" : {
            "value" : 26161.535714285714
          }
        },
        {
          "key" : "ID",
          "doc_count" : 27,
          "sum_balance" : {
            "value" : 657957.0
          },
          "average_balance" : {
            "value" : 24368.777777777777
          }
        }
      ]
    }
  }
}

Estadísticas por provincia y ordenadas por salario promedio

El orden predeterminado de los términos agg es el recuento descendente, si queremos usar otros métodos, SQL puede ser así:

select 
  state, avg(balance) AS average_balance, count(*) AS group_by_state 
from tbl_bank
group by state
order by average_balance
limit 3

Los es correspondientes pueden consultarse así:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "order": {
          "average_balance": "desc"
        },
        "size": 3
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

El resultado devuelto top3 no es el anterior:

  "aggregations" : {
    "group_by_state" : {
      "doc_count_error_upper_bound" : -1,
      "sum_other_doc_count" : 983,
      "buckets" : [
        {
          "key" : "DE",
          "doc_count" : 2,
          "average_balance" : {
            "value" : 39040.5
          }
        },
        {
          "key" : "RI",
          "doc_count" : 5,
          "average_balance" : {
            "value" : 36035.4
          }
        },
        {
          "key" : "NE",
          "doc_count" : 10,
          "average_balance" : {
            "value" : 35648.8
          }
        }
      ]
    }
  }

Referencia

Supongo que te gusta

Origin www.cnblogs.com/woshimrf/p/es7-start.html
Recomendado
Clasificación