base Python: Python tutoriales de operación de datos indexada Elasticsearch

En este artículo se describe el uso de Python curso de manejo Elasticsearch índice de datos, procesamiento de datos de índice Elasticsearch muy eficiente, se puede referir a un amigo
Elasticsearch es un servidor distribuido, búsqueda y análisis de reparador, Apache Solr, como también se basa en la Lucence servidor de índices, pero creo Elasticsearch reside la ventaja comparativa en Solr:

轻量级:安装启动方便,下载文件之后一条命令就可以启动;
Schema free:可以向服务器提交任意结构的JSON对象,Solr中使用schema.xml指定了索引结构;
多索引文件支持:使用不同的index参数就能创建另一个索引文件,Solr中需要另行配置;
分布式:Solr Cloud的配置比较复杂。

Medio Ambiente para construir

Inicio Elasticsearch, puertos de acceso en 9200, puede ver los datos JSON devueltos por el navegador, presentación Elasticsearch y devolución de formatos de datos se JSON.

>> bin/elasticsearch -f

Instalar Python API proporcionada por el funcionario, algunos de los errores de tiempo de ejecución Python se produce después de instalar en OS X, porque la versión setuptools es demasiado viejo a punto de volver a la normalidad después de eliminar recarga.

>> pip install elasticsearch

Las operaciones de índice

Para un solo índice, puede llamar o crear el método del índice.

from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch() #create a localhost server connection, or Elasticsearch("ip")
es.create(index="test-index", doc_type="test-type", id=1,
  body={"any":"data", "timestamp": datetime.now()})

Elasticsearch índice de pedidos en bloque es mayor, actualmente Python ejemplo documentación de la API menos, pasó mucho tiempo para leer el código fuente para averiguar acaba de presentar un índice de formato por lotes.

from datetime import datetime
from elasticsearch import Elasticsearch
from elasticsearch import helpers
es = Elasticsearch("10.18.13.3")
j = 0
count = int(df[0].count())
actions = []
while (j < count):
   action = {
        "_index": "tickets-index",
        "_type": "tickets",
        "_id": j + 1,
        "_source": {
              "crawaldate":df[0][j],
              "flight":df[1][j],
              "price":float(df[2][j]),
              "discount":float(df[3][j]),
              "date":df[4][j],
              "takeoff":df[5][j],
              "land":df[6][j],
              "source":df[7][j],
              "timestamp": datetime.now()}
        }
  actions.append(action)
  j += 1
 
  if (len(actions) == 500000):
    helpers.bulk(es, actions)
    del actions[0:len(actions)]
 
if (len(actions) > 0):
  helpers.bulk(es, actions)
  del actions[0:len(actions)]

Encontramos aquí el apoyo de serialización Python API JSON más limitados tipos de datos, los datos NumPy.Int32 primas utilizadas para ser convertidos en un índice int. Además, ahora el defecto operación masiva es 500 por presentación de datos, modifiqué la prueba de 5.000 o incluso 50.000, el índice voluntad situación sin éxito.

#helpers.py source code
def streaming_bulk(client, actions, chunk_size=500, raise_on_error=False,
    expand_action_callback=expand_action, **kwargs):
  actions = map(expand_action_callback, actions)
 
  # if raise on error is set, we need to collect errors per chunk before raising them
  errors = []
 
  while True:
    chunk = islice(actions, chunk_size)
    bulk_actions = []
    for action, data in chunk:
      bulk_actions.append(action)
      if data is not None:
        bulk_actions.append(data)
 
    if not bulk_actions:
      return
 
def bulk(client, actions, stats_only=False, **kwargs):
  success, failed = 0, 0
 
  # list of errors to be collected is not stats_only
  errors = []
 
  for ok, item in streaming_bulk(client, actions, **kwargs):
    # go through request-reponse pairs and detect failures
    if not ok:
      if not stats_only:
        errors.append(item)
      failed += 1
    else:
      success += 1
 
  return success, failed if stats_only else errors

Para un índice de masa operaciones de borrado y actualización, el formato de documento correspondiente es el siguiente, doc nodo actualiza un documento es necesario.

{
  '_op_type': 'delete',
  '_index': 'index-name',
  '_type': 'document',
  '_id': 42,
}
{
  '_op_type': 'update',
  '_index': 'index-name',
  '_type': 'document',
  '_id': 42,
  'doc': {'question': 'The life, universe and everything.'}
}

Errores comunes

SerializationError:JSON数据序列化出错,通常是因为不支持某个节点值的数据类型
RequestError:提交数据格式不正确
ConflictError:索引ID冲突
TransportError:连接无法建立

Rendimiento
Aquí Insertar imagen Descripción
Comparación Los datos anteriores son los mismos y el uso de almacenamiento MongoDB Elasticsearch, aunque los servidores y el modo de operación no son idénticos, pero podemos ver la base de datos para escribir o más lotes tienen la ventaja sobre el servidor de índices.

archivos de índice Elasticsearch son automáticamente bloque, los datos no llega a diez millones efecto sobre la velocidad de escritura. Pero al alcance de límite de espacio en disco, se produjo Elasticsearch error de archivo fusión, y la gran cantidad de datos que faltan (perdido un total de más de 1 millón de dólares), después de detener al cliente grabación, el servidor no se reanuda automáticamente, debe detener manualmente. En un entorno de producción es más mortal, sobre todo, no puede parecer el uso de los clientes que no son Java para llegar al servidor de un cliente excepción de Java, que permite que el programador debe manejar con cuidado el servidor de información de la declaración.
Me dirijo a usted, para todo el mundo para recomendar una muy amplia recolección de recursos de aprendizaje pitón, haga clic para entrar , hay un programador senior antes de aprender a compartir experiencias, notas de estudio, hay una posibilidad de experiencia en los negocios, y para todo el mundo para organizar cuidadosamente un cero pitón la base de los datos de proyecto real, pitón diariamente para que en la última tecnología, las perspectivas, aprender a dejar un mensaje de pequeños detalles

Publicado 38 artículos originales · ganado elogios 10 · Vistas a 50000 +

Supongo que te gusta

Origin blog.csdn.net/haoxun11/article/details/105036608
Recomendado
Clasificación