Comandos básicos de ElasticSearch

Autor original: Cattle McConaughey

Dirección original: comando ElasticSearch- (artículo básico)

Curl es una herramienta de transferencia de archivos de código abierto que utiliza la sintaxis de URL para trabajar en el modo de línea de comandos. Las solicitudes comunes de obtención / publicación se pueden realizar fácilmente utilizando curl . Simplemente piense en ello como una herramienta que puede acceder a la URL desde la línea de comando . Parámetros de rizo comunes: 

  • -X especifica que el método de solicitud http tiene HEAD GET POST PUT DELETE 
  • -d especifica los datos a transferir 
  • -H especifica la información del encabezado de la solicitud http 

Las llamadas de comando de ElasticSearch se basan en http, y proporciona una API RESTFul rica, y usa curl para operar comandos comunes de ElasticSearch. Desde el punto de vista funcional, los comandos de ElasticSearch se pueden dividir en 4 categorías:

  1. Verifique la información de estado del clúster, nodo, índice, etc .;
  2. Administre clústeres, nodos, datos de índice y metadatos;
  3. Realizar operaciones CRUD y operaciones de búsqueda;
  4. Realizar operaciones de búsqueda avanzada, como paginación, filtrado, secuencias de comandos, facetado, agregaciones y otras operaciones;

Uno, comandos API

1. Ver comandos para clúster, nodo, índice y otra información de estado:

1. Controle su salud

curl -XGET 'localhost:9200/_cat/health?v'

2. Ver índice

curl -XGET 'localhost:9200/_cat/indices?v'

3. Ver nodos

curl -XGET 'localhost:9200/_cat/nodes?v'

Resumen: estos comandos son todas solicitudes GET

curl -XGET 'ip:port/_cat/XXX?v'

2. Agregar, eliminar, modificar y verificar comandos:

El formato seguido por el comando:

curl -X<REST Verb> '<Node>:<Port>/<Index>/<Type>/<ID>'

La nueva modificación es una solicitud PUT, la eliminación es una solicitud DELETE y la consulta es GET

1. Crear índice

bonito No es necesario para que la información devuelta sea más bonita

curl -XPUT 'localhost:9200/customer?pretty'

2. Insertar documento

curl -XPUT 'localhost:9200/customer/car/1?pretty' -d 
        '{
          "name": "YeJingtao"
         }'
  • El tipo no se puede omitir al insertar el documento, se debe especificar.
  • La creación del índice puede ser implícita, si no se especifica, Elasticsearch generará un ID único para indexar este documento. Desde la perspectiva del diseño de ES, nos preocupa más el índice del contenido del documento que la identificación, por lo que la identificación se puede entregar a ES para su mantenimiento en aplicaciones prácticas.

3. Ver registros

curl -XGET 'localhost:9200/customer/car/1?pretty'

4. Registros de modificaciones

curl -XPUT 'localhost:9200/customer/car/1?pretty' -d 
       '{
          "name": "YeJingtao-V2"
        }'

(PUT y POST tienen el mismo efecto, PUT es idempotente)

5. Eliminar registros

curl -XDELETE 'localhost:9200/customer/car/1?pretty'

6. Eliminar índice

curl -XDELETE 'localhost:9200/customer'

Cuando se elimina el índice, se borran todos los tipos y registros del índice.

Dos, comando de operación por lotes a granel

Además de las operaciones individuales descritas anteriormente, ES también proporciona una API llamada masiva para realizar operaciones por lotes , actualizar o eliminar grandes lotes de documentos e índices, lo que mejora enormemente la eficiencia operativa. El formato del comando API es:

ip:port/index/type/_bulk–data-binary @jsonfile

Jsonfile también tiene requisitos de formato, que deben ser una línea de información de descripción y una línea de información de documento. Descripción:

{"index":
    {
        "_index":"stuff_orders",
        "_type":"order_list",
        "_id":903713
    }
}

Entre ellos, el índice y el tipo no son necesarios. Corresponden al índice y escriba el comando API anterior. Elija uno de los dos. Si ambos existen, prevalecerá el archivo json.

Siempre que la información del documento esté en formato json estándar, no hay requisitos de contenido, por ejemplo:

{
    "account_number":1,
    "balance":39225,
    "firstname":"Amber",
    "lastname":"Duke",
    "age":32,
    "gender":"M",
    "address":"880HolmesLane",
    "employer":"Pyrami",
    "email":"[email protected]",
    "city":"Brogan",
    "state":"IL"
}

Muestra de documento: https://github.com/yejingtao/forblog/tree/master/elasticsearch

mando:

curl -XPOST 192.168.226.133:9200/my_index/customer/_bulk?pretty --data-binary @accounts.json

Mire hacia atrás en el estado del índice:

Con estos 1.000 registros, podemos iniciar el "viaje de búsqueda" central de ES.

3. Clasificación de consultas:

Hay dos formas de dividir el formato del comando:

  • Pase los parámetros de consulta a través de la API RESTfulrequest, también llamada "query-string";
  • Al enviar el cuerpo de la solicitud REST, también conocido como formato JSON.

Primero, sienta intuitivamente la diferencia entre los dos estilos Los dos comandos siguientes son equivalentes.

Estilo 1:

curl -XGET '192.168.226.133:9200/my_index/_search?pretty'

Estilo 2:

curl -XGET 'localhost:9200/my_index/_search?pretty' -d
           '{
              "query": {
                    "match_all": {} 
                }
            }'

El nombre del índice y el nombre del tipo se pueden especificar en la URL al realizar una búsqueda para reducir el alcance de la búsqueda :

  • / _search : Busca todo tipo de índices;
  • / my_index / _search: Busca todos los tipos de índice my_index;
  • / estudiantes, my_index / _search: busca todo tipo de estudiantes e índices my_index;
  • / my _ * / _search: Busca todos los tipos de todos los índices cuyos nombres comienzan con my_;
  • / my_index / customer / _search: busca el tipo de cliente del índice my_index;
  • / _todos / cliente / _search: busca todos los tipos de clientes indexados

PD: Una vez que recupere los resultados de su búsqueda, Elasticsearch habrá completado su misión. No mantendrá ningún recurso del lado del servidor ni cursores abiertos en sus resultados. Esta también es una característica del estilo RESTFul, y está destinado a que ES devuelva cada tiempo El valor está limitado por defecto.

Dado que el formato JSON del cuerpo de la solicitud REST aporta demasiada belleza a los desarrolladores en términos de legibilidad y flexibilidad, el formato JSON se utiliza principalmente en aplicaciones prácticas. Esta declaración de consulta también se denomina DSL . El DSL se divide en DSL de consulta (DSL de consulta) y DSL de filtro (DSL de filtro) debido a diferentes principios .

Si usa el comando linux curl para escribir en formato DSL, es realmente agotador. Aquí usamos Kibana en combinación ELK para ayudarnos a consultar ES.

Enlace de descarga: https://www.elastic.co/downloads/kibana

Siga el tutorial del sitio web oficial:

  1. Descarga y descomprime,
  2. Configuración de ubicación / kibana.yml,
  3. 执 执 bin / kibana,
  4. Visite el navegador http: // localhost: 5601

 

 

Dos, línea de comando de Kibana

Consultas relacionadas con el clúster

# 查询集群健康状态
GET _cluster/health

# 查询所有节点
GET _cat/nodes

# 查询索引及分片的分布
GET _cat/shards

# 查询指定索引分片的分布
GET _cat/shards/order_stpprdinf_2019-12?v

# 查询所有插件
GET _cat/plugins

Consultas relacionadas con el índice

# 查询所有索引及容量
GET _cat/indices

# 查询索引映射结构
GET my_index/_mapping

# 查询所有索引映射结构    
GET _all

# 查询所有的相同前缀索引
GET my-*/_search

# 查询所有索引模板   
GET _template

# 查询具体索引模板
GET _template/my_template

Operaciones relacionadas con el índice

1. Cree una plantilla de índice

# 创建模板
PUT _template/test_hot_cold_template
{
    "index_patterns": "test_*",
    "settings": {
        "number_of_shards" : 3,
        "index.number_of_replicas": 1
     },
    "mappings": {
      "order": {
          "dynamic": false, 
          "properties": {
              "id": {"type": "long"},
              "name": {"type": "keyword"}
          }
      }    
    },
    "aliases": {
      "test": {}
    }      
}

# 根据模板创建索引并写入数据
POST test_hot_cold-2019-12-01/order
{
  "id":1,
  "name":"cwx"
}

# 删除模板
DELETE _template/order_stpprdinf_template

2. Cree un índice directamente

PUT my_index
{
  "mappings": {
    "doc": {
      "properties": {
        "name": {
          "type": "text"
        },
        "blob": {
          "type": "binary"
        }
      }
    }
  }
}

# 增加字段
put my_index/_mapping/doc
{
    "properties": {
      "cwxtest": {"type": "keyword"}
    }
}

# 数据冷备份
PUT _snapshot/my_backup  # my_backup 备份的名称
{
    "type": "order", 
    "settings": {
        "location": "/mount/backups/my_backup" 
    }
}

3. Escribir índice

PUT my_index/doc/1
{
  "name": "Some binary blob",
  "blob": "U29tZSBiaW5hcnkgYmxvYg==" 
}

4. Eliminar el índice

DELETE my-index

5. Modificar la configuración del índice

PUT /test_hot_cold-2019-12-01/_settings 
{ 
  "settings": { 
    "index.routing.allocation.require.hotwarm_type": "cold"
  } 
}

DSL

1. Consulta de consulta

# 1.查询所有
GET _search
{
  "query": {
    "match_all": {}
  }
}

# 2.查询单个索引 的 固定属性
# 精确匹配
GET _search
{
  "query": {
    "term": { "name" : "you" }
  }
}

# 模糊匹配
GET _search
{
  "query": {
    "match": { "name" : "you" }
  }
}
# 范围查找
GET _search
{
  "query": {
    "range": {
        "age":{ "gte" : 15 , "lte" : 25 }
    }
  }
}
 GET indexName/_search {     "query": {           "wildcard":{"relateId":"*672499460503*"}     } }

# 3.功能性查询
# 过滤
GET my_index/_search
{
  "query": {
    "bool": {
      "filter": {
        "term":{"age":1095}
      }
    }
  }
}

# 或 or
GET my - test / _search {
  "query": {
    "bool": {
      "should": [{
        "term": {
          "name": "you"
        }
        }, {
        "match": {
          "age": 20
        }
      }]
    }
  }
}

# 与 AND
GET my-test/_search
{
  "query": {
    "bool": {
      "must" : [{
        "match" : {
          "name" : "you"
        }
      },{
        "range":{
        "age":{
          "from" : 10 , "to" : 20
        } 
        }
      }]
    }
  }
}

# 必须 =
GET my_index/_search
{
  "query": {
    "bool": {
      "must" : {
        "range" : {
          "age" : { "from" : 10, "to" : 20 }
        }
      }
    }
  }
}

# 必须不 not
GET my_index/_search
{
  "query": {
    "bool": {
      "must_not" : {
        "term" : {
          "name" : "you"
        }
      }
    }
  }
}

# 复合查找
GET my_index/_search 
{
"query": {
"bool": {
"should": [{
"match": {
"age": 40
}
}, 
{
"match": {
"age": 20
}
}],
"filter": {
  "match":{
    "name":"you"
  }
}
}
}
}

# 4.索引迁移
# 场景 从A索引 复制到B索引
POST _reindex
{
  "source": {
    "index": "my_index"
  },
  "dest": {
    "index": "new_my_index"
  }
}


# 5.基于查询的删除
POST test-index/_delete_by_query
{
  "query":{
        "term": {
         "cameraId":"00000000002"
        }
  }

}

# 查询
GET test-index/_search
{
  "query":{
        "term": {
         "cameraId":"00000000002"
        }
  }
}

Consulta por rango de tiempo:

GET order_stpprdinf_2019-12/_search
{
  "size":10,
  "query":{
    "range":{
      "order_time":{
        "gte":"2019-12-11T00:00:00+08:00",
        "lte":"2019-12-11T23:59:59+08:00"
      } 
    }
  }
}

Eliminar por condición:

GET order_stpprdinf_2019-12/_delete_by_query?conflicts=proceed
{
  "query":{
    "range":{
      "order_time":{
        "gte":"2019-12-11T00:00:00+08:00",
        "lte":"2019-12-11T23:59:59+08:00"
      } 
    }
  }
}

Los comandos anteriores se pueden ejecutar en el panel de control Dev Tools de kibana:

Enlace de referencia: https://blog.csdn.net/ailice001/article/details/79541816

Supongo que te gusta

Origin blog.csdn.net/sanmi8276/article/details/112941215
Recomendado
Clasificación