Elasticsearch
Python-gränssnitt
Sök…
parametrar
| Parameter | detaljer |
|---|---|
| värdar | Array av värdar i form av objekt som innehåller nycklar host och port . Default host är 'localhost' och port är 9200. En provinmatning ser ut som [{"host": "ip of es server", "port": 9200}] |
| sniff_on_start | Boolean om du vill att klienten ska sniffa noder vid start, sniffning betyder att få en lista över noder i elasticsearch-klustret |
| sniff_on_connection_fail | Boolean för att utlösa sniffning om anslutningen misslyckas när klienten är aktiv |
| sniffer_timeout | tidsskillnad i sekunder mellan varje sniff |
| sniff_timeout | tid för en enda begäran om att sniffa på några sekunder |
| retry_on_timeout | Booelan för om klienten skulle timeout trigga kontakta en annan elasticsearch-nod eller bara kasta fel |
| http_auth | Grundläggande http-autentisering kan tillhandahållas här i form av username:password |
Indexera ett dokument (dvs. lägga till ett exempel)
Installera nödvändigt Python-bibliotek via:
$ pip install elasticsearch
Anslut till Elasticsearch, Skapa ett dokument (t.ex. datainmatning) och "indexera" dokumentet med 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"])
Anslutning till ett kluster
es = Elasticsearch(hosts=hosts, sniff_on_start=True, sniff_on_connection_fail=True, sniffer_timeout=60, sniff_timeout=10, retry_on_timeout=True)
Skapa ett tomt index och ställa in kartläggningen
I det här exemplet skapar vi ett tomt index (vi indexerar inga dokument i det) genom att definiera dess mappning.
Först skapar vi en ElasticSearch instans och definierar sedan kartan enligt vårt val. Därefter kontrollerar vi om indexet finns och om inte, skapar vi det genom att ange index och body som innehåller indexnamnet respektive karaktärens karaktär.
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))
Partiell uppdatering och uppdatering efter fråga
Partiell Uppdatering: Används när en partiell dokument uppdatering behövs göras, det vill säga i följande exempel name på dokumentet med id doc_id kommer att uppdateras till 'John'. Observera att om fältet saknas kommer det bara att läggas till i dokumentet.
doc = {
"doc": {
"name": "John"
}
}
es.update(index='index_name',
doc_type='doc_name',
id='doc_id',
body=doc)
Uppdatering av frågan: Används när det behövs för att uppdatera dokument som uppfyller ett villkor, det vill säga i följande exempel vi uppdaterar ålder dokument vars name fältet matcher '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')