Elasticsearch
Python-interface
Zoeken…
parameters
| Parameter | Details |
|---|---|
| hosts | Reeks systemen in de vorm van object met toetsen host en port . Standaard host is 'localhost' en port is 9200. Een monster binnenkomst ziet eruit als [{"host": "ip of es server", "port": 9200}] |
| sniff_on_start | Boolean als u wilt dat de client knopen bij het opstarten snuift, betekent snuiven een lijst met knopen in het elastische-zoekcluster |
| sniff_on_connection_fail | Boolean voor het activeren van snuiven als de verbinding mislukt wanneer de client actief is |
| sniffer_timeout | tijdsverschil in seconden tussen elke snuif |
| sniff_timeout | tijd voor een enkel verzoek om in seconden te snuffelen |
| retry_on_timeout | Booelan voor als client time-out triggert die contact maakt met een ander elastisch zoekknooppunt of gewoon een foutmelding geeft |
| http_auth | Basis http-authenticatie kan hier worden verstrekt in de vorm van username:password |
Een document indexeren (bijvoorbeeld een voorbeeld toevoegen)
Installeer de benodigde Python-bibliotheek via:
$ pip install elasticsearch
Maak verbinding met Elasticsearch, maak een document (bijvoorbeeld gegevensinvoer) en "indexeer" het document met Elasticsearch.
from datetime import datetime
from elasticsearch import Elasticsearch
# Connect to Elasticsearch using default options (localhost:9200)
es = Elasticsearch()
# Define a simple Dictionary object that we'll index to make a document in ES
doc = {
'author': 'kimchy',
'text': 'Elasticsearch: cool. bonsai cool.',
'timestamp': datetime.now(),
}
# Write a document
res = es.index(index="test-index", doc_type='tweet', id=1, body=doc)
print(res['created'])
# Fetch the document
res = es.get(index="test-index", doc_type='tweet', id=1)
print(res['_source'])
# Refresh the specified index (or indices) to guarantee that the document
# is searchable (avoid race conditions with near realtime search)
es.indices.refresh(index="test-index")
# Search for the document
res = es.search(index="test-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res['hits']['total'])
# Show each "hit" or search response (max of 10 by default)
for hit in res['hits']['hits']:
print("%(timestamp)s %(author)s: %(text)s" % hit["_source"])
Verbinding met een cluster
es = Elasticsearch(hosts=hosts, sniff_on_start=True, sniff_on_connection_fail=True, sniffer_timeout=60, sniff_timeout=10, retry_on_timeout=True)
Een lege index maken en de toewijzing instellen
In dit voorbeeld maken we een lege index (we indexeren er geen documenten in) door de toewijzing ervan te definiëren.
Eerst maken we een ElasticSearch instantie en definiëren we vervolgens de toewijzing van onze keuze. Vervolgens controleren we of de index bestaat en zo niet, maken we deze door de index en body parameters op te geven die respectievelijk de indexnaam en de body van de mapping bevatten.
from elasticsearch import Elasticsearch
# create an ElasticSearch instance
es = Elasticsearch()
# name the index
index_name = "my_index"
# define the mapping
mapping = {
"mappings": {
"my_type": {
"properties": {
"foo": {'type': 'text'},
"bar": {'type': 'keyword'}
}
}
}
}
# create an empty index with the defined mapping - no documents added
if not es.indices.exists(index_name):
res = es.indices.create(
index=index_name,
body=mapping
)
# check the response of the request
print(res)
# check the result of the mapping on the index
print(es.indices.get_mapping(index_name))
Gedeeltelijke update en update per query
Gedeeltelijke Update: Gebruikt wanneer een gedeeltelijke-update document is gedaan moest worden, dat wil zeggen in het volgende voorbeeld het veld name van het document met id doc_id zal worden bijgewerkt met 'John'. Merk op dat als het veld ontbreekt, het alleen aan het document wordt toegevoegd.
doc = {
"doc": {
"name": "John"
}
}
es.update(index='index_name',
doc_type='doc_name',
id='doc_id',
body=doc)
Update door te query: Wordt gebruikt wanneer nodig is om documenten bij te werken dat een voorwaarde, dat wil zeggen in het volgende voorbeeld voldoen we een update van de leeftijd van de documenten waarvan de name veld wedstrijden 'John'.
q = {
"script": {
"inline": "ctx._source.age=23",
"lang": "painless"
},
"query": {
"match": {
"name": "John"
}
}
}
es.update_by_query(body=q,
doc_type='doc_name',
index='index_name')