Поиск…


параметры

параметр подробности
хостов Массив хостов в виде объектов , содержащих ключи host и port . По умолчанию host является «локальным» и port является 9200. Запись образца выглядит как [{"host": "ip of es server", "port": 9200}] - [{"host": "ip of es server", "port": 9200}] - [{"host": "ip of es server", "port": 9200}]
sniff_on_start Boolean, если вы хотите, чтобы клиент обнюхивал узлы при запуске, sniffing означает получение списка узлов в кластере elasticsearch
sniff_on_connection_fail Boolean для запуска sniffing, если соединение терпит неудачу, когда клиент активен
sniffer_timeout разница во времени между секундами между каждым нюхом
sniff_timeout время для одного запроса обнюхивания в секундах
retry_on_timeout Booelan, если клиент должен тайм-аут, связавшись с другим узлом elasticsearch или просто выбросить ошибку
http_auth Основная HTTP-аутентификация может быть представлена ​​здесь в форме имени username:password

Индексирование документа (например, добавление образца)

Установите необходимую библиотеку Python через:

$ pip install elasticsearch

Подключитесь к Elasticsearch, создайте документ (например, ввод данных) и «Индекс» документа, используя 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"])

Подключение к кластеру

es = Elasticsearch(hosts=hosts, sniff_on_start=True, sniff_on_connection_fail=True, sniffer_timeout=60, sniff_timeout=10, retry_on_timeout=True)

Создание пустого индекса и настройка отображения

В этом примере мы создаем пустой индекс (мы индексируем в нем никакие документы), определяя его отображение.

Сначала мы создаем экземпляр ElasticSearch а затем определяем отображение нашего выбора. Затем мы проверяем, существует ли индекс, а если нет, мы создаем его, указав параметры index и body которые содержат имя индекса и тело отображения, соответственно.

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

Частичное обновление и обновление по запросу

Частичное обновление: используется, когда необходимо выполнить частичное обновление документа, то есть в следующем примере name поля документа с id doc_id будет обновляться до «John». Обратите внимание: если поле отсутствует, оно будет добавлено в документ.

doc = {
    "doc": {
        "name": "John"
    }
}
es.update(index='index_name',
          doc_type='doc_name',
          id='doc_id',
          body=doc)

Обновление по запросу: используется, когда необходимо обновить документы, удовлетворяющие условию, то есть в следующем примере мы обновляем возраст документов, чье поле name совпадает с «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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow