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')


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow