Как искать в elasticsearch python с помощью метода get - PullRequest
0 голосов
/ 13 июля 2020

мои данные в индексе ниже

{'took': 0,
 'timed_out': False,
 '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0},
 'hits': {'total': {'value': 4, 'relation': 'eq'},
  'max_score': 1.0,
  'hits': [{'_index': 'my-index_1',
    '_type': '_doc',
    '_id': 'COdBR3MB5PHr9J6CaD9A',
    '_score': 1.0,
    '_source': {'id': '1', 'data': 'Health'}},
   {'_index': 'my-index_1',
    '_type': '_doc',
    '_id': 'CedBR3MB5PHr9J6CaD_S',
    '_score': 1.0,
    '_source': {'id': '2', 'data': 'countries'}},
   {'_index': 'my-index_1',
    '_type': '_doc',
    '_id': 'CudBR3MB5PHr9J6CaD_Z',
    '_score': 1.0,
    '_source': {'id': '3', 'data': 'countries currency'}},
   {'_index': 'my-index_1',
    '_type': '_doc',
    '_id': 'C-dBR3MB5PHr9J6CaD_g',
    '_score': 1.0,
    '_source': {'id': '4', 'data': 'countries language'}}]}}

Q1. * Как получить id=4 с помощью метода get?

Мой код ниже, но он не работает

firstdoc = es.get(index="my-index_1",  id='4')
print(firstdoc['_source'])

NotFoundError Traceback (most recent call last)

Ожидается

{'_index': 'my-index_1',
        '_type': '_doc',
        '_id': 'C-dBR3MB5PHr9J6CaD_g',
        '_score': 1.0,
        '_source': {'id': '4', 'data': 'countries language'}}

Код ниже для pu sh do c to elasticsearch

from elasticsearch import Elasticsearch
es = Elasticsearch()

r = [{'id': '1', 'data': 'Health'},
 {'id': '2', 'data': 'countries'},
 {'id': '3', 'data': 'countries currency'},
 {'id': '4', 'data': 'countries language'}]

es.indices.create(index='my-index_1', ignore=400)
for e in enumerate(r):
    #es.indices.update(index="my-index_1", body=e[1])
    es.index(index="my-index_1", body=e[1])

1 Ответ

0 голосов
/ 15 июля 2020

Параметр .get id метода относится к мета-идентификатору elasti c или _id. Чтобы получить запись с полем с именем id, содержащим значение «4», вам необходимо выполнить поиск / запрос по нему с помощью чего-то вроде es.search(index='my-index-1', body={"query": {"match": {"id": "4"}}}). Если вы хотите, чтобы elasti c _id совпадал с полем id в r, вам необходимо изменить индексирование на es.index(index='my-index-1', id=e[1]['id'], body=e[1]).

...