3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonでElasticsearchを操作する(登録・検索)

Posted at

目的

  • pythonからElasticsearchを操作する
  • python、Elasticsearchは別々のDockerコンテナで動作し、それぞれはdocker-composeで起動している

やらないこと

環境

  • OS: macOS Catalina 10.15.4
  • Docker: 2.2.0.5
  • docker-compose: 1.25.4
  • ElasticSearch: 7.4.2

やったこと

登録処理を作成

コンテナでのpip installやコンテナ名は、構築した時の投稿を参照してください(参考:DockerコンテナでElasticSearchを起動する(docker-compose)

registration.py
import os
import elasticsearch

# 接続先のElastisearchを指定(今回はElasticsearchのコンテナ名を指定)
client = elasticsearch.Elasticsearch("elasticsearch")

game = {}
game['title'] = 'hiroky quest'
game['genre'] = 1
game['release_date'] = '2020/05/01'
game['memo'] = 'memo'
# indexを指定して登録を行う
client.index(index='games', doc_type='_doc', body=game)

接続先は今回はDocker Networkを使用しているので、コンテナ名を指定する
(ローカルで起動しているElasticsearchであれば「localhost:9200」を指定する)

# 接続先のElastisearchを指定(今回はElasticsearchのコンテナ名を指定)
client = elasticsearch.Elasticsearch("elasticsearch")

indexはRDSのテーブルにあたるものである(はず)で、RDSと違うところはindexを作らなくても登録を実行すると自動でindexを追加してくれる
mappingも自動で作成される(RDSのテーブル定義みたいなもの)

# indexを指定して登録を行う
client.index(index='games', doc_type='_doc', body=game)

検索をして登録を確認する

search.py
import os
import elasticsearch

# Elasticsearchのコンテナ名を指定(Docker Network)
client = elasticsearch.Elasticsearch("elasticsearch")

# index指定で検索
result = client.search(
    index='games'
)
print(result)

client.searchで検索を行う。この場合はindexを全件検索する

# python3 search.py
{'took': 11, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 1, 'relation': 'eq'}, 'max_score': 1.0, 'hits': [{'_index': 'games', '_type': '_doc', '_id': 'AAyn53EBfM-Vwr_FW_d7', '_score': 1.0, '_source': {'title': 'hiroky quest', 'genre': 1, 'release_date': '2020/05/01', 'memo': 'memo'}}]}}

検索条件を指定して検索することも可能

search.py
import os
import elasticsearch

# Elasticsearchのコンテナ名を指定(Docker Network)
client = elasticsearch.Elasticsearch("elasticsearch")

# 条件検索
result = client.search(
    index='games',
    body={'query': {'match': {'genre': 1}}}
)

print(result)

この場合は'genre': 1に該当するレコードが検索結果として得られる
'match'は完全一致として検索する

感想

pythonのclientの使い方が簡単なので、楽に実装できた
まだ単純な登録と検索のみなので、使い込んでいきたいところ

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?