python操作es
32773 ワード
Elasticsearchはオープンソースの検索エンジンで、全文検索エンジンライブラリApache Luceneに構築されています.™ 基礎の上.Luceneは現在存在する可能性があります.オープンソースでもプライベートでも、最先端、高性能、全機能の検索エンジン機能を持つライブラリです.しかしLuceneはただのライブラリです.それを利用するには、Javaプログラムを作成し、javaプログラムにLuceneパッケージを直接統合する必要があります.さらに悪いことに、Luceneがどのように働いているのかを理解するには、情報検索をある程度理解する必要があります.Luceneは複雑です.前回のブログではElasticSearchの簡単な使い方を紹介していましたが、次にElasticSearchのクエリーを記録します:#indexインデックスを作成#インデックスを作成#インデックスの名前はmy-indexで、すでに存在している場合は400を返します.#このインデックスは今作成することも、後でデータを挿入するときに一時的に作成することもできます
#挿入データ#挿入データ、(ここでは他の2つのデータの挿入を省略し、後で使用)
#getデータを取得#クエリーデータ、2種類のget and search#get取得
#データ削除delete:index、type、idを指定したドキュメントを削除
#条件削除
#条件更新update_by_Query:条件を満たすすべてのデータを更新し、書き方は上削除とクエリー#一括書込み、削除、更新
#一括更新は、以下のようにjsonパッチワークを行い、最後に書き込むこともできます.
すべてのデータを問合せすべてのデータを検索
#termとterms
#matchとmulti_match
# multi_match:nameとaddrで深センのキーワードを含むデータをマッチング
#複合クエリーbool
#範囲クエリー
#接頭辞クエリー
#ワイルドカードクエリ
#ソート#ソート#
#filter_path応答フィルタ#は取得するだけです.idデータは、複数の条件でesをカンマで区切る.search(index="my_index",doc_type="test_type",filter_path=["hits.hits._id"])#すべてのデータesを取得する.search(index="my_index",doc_type="test_type",filter_path=["hits.hits.*]])#countはクエリを実行し、そのクエリのマッチング数#取得データ量esを取得する.count(index="my_index",doc_type="test_type")#メトリッククラス集約最小値取得
最大値の取得
取得と
es.indices.create(index='my-index',ignore)
#挿入データ#挿入データ、(ここでは他の2つのデータの挿入を省略し、後で使用)
es.index(index="my-index",doc_type="test-type",id=01,body={"any":"data01","timestamp":datetime.now()})
#getデータを取得#クエリーデータ、2種類のget and search#get取得
res = es.get(index="my-index", doc_type="test-type", id=01)
es.get(index='indexName', doc_type='typeName', id='idValue')
#データ削除delete:index、type、idを指定したドキュメントを削除
es.delete(index='indexName', doc_type='typeName', id='idValue')
#条件削除
delete_by_query: , DLS
query = {'query': {'match': {'sex': 'famale'}}}#
query = {'query': {'range': {'age': {'lt': 11}}}}# 11
es.delete_by_query(index='indexName', body=query, doc_type='typeName')
#条件更新update_by_Query:条件を満たすすべてのデータを更新し、書き方は上削除とクエリー#一括書込み、削除、更新
delete_by_query: , DLS
query = {'query': {'match': {'sex': 'famale'}}}#
query = {'query': {'range': {'age': {'lt': 11}}}}# 11
es.delete_by_query(index='indexName', body=query, doc_type='typeName')
#一括更新は、以下のようにjsonパッチワークを行い、最後に書き込むこともできます.
for line in list:
action = {
"_index": self.index_name,
"_type": self.index_type,
"_id": i, #_id ,
"_source": {
"date": line['date'],
"source": line['source'].decode('utf8'),
"link": line['link'],
"keyword": line['keyword'].decode('utf8'),
"title": line['title'].decode('utf8')}
}
i += 1
ACTIONS.append(action)
success, _ = bulk(self.es, ACTIONS, index=self.index_name, raise_on_error=True)
すべてのデータを問合せすべてのデータを検索
es.search(index="my_index",doc_type="test_type")
#
body = {
"query":{
"match_all":{}
}
}
es.search(index="my_index",doc_type="test_type",body=body)
#termとterms
body = {
"query":{
"term":{
"name":"python"
}
}
}
# name="python"
es.search(index="my_index",doc_type="test_type",body=body)
terms
body = {
"query":{
"terms":{
"name":[
"python","android"
]
}
}
}
# name="python" name="android"
es.search(index="my_index",doc_type="test_type",body=body)
#matchとmulti_match
# match: name python
body = {
"query":{
"match":{
"name":"python"
}
}
}
# name python
es.search(index="my_index",doc_type="test_type",body=body)
# multi_match:nameとaddrで深センのキーワードを含むデータをマッチング
body = {
"query":{
"multi_match":{
"query":" ",
"fields":["name","addr"]
}
}
}
# name addr " "
es.search(index="my_index",doc_type="test_type",body=body)
#ids
body = {
"query":{
"ids":{
"type":"test_type",
"values":[
"1","2"
]
}
}
}
# id 1 2d
es.search(index="my_index",doc_type="test_type",body=body)
#複合クエリーbool
bool 3 ,must( ),should( ),must_not( )
body = {
"query":{
"bool":{
"must":[
{
"term":{
"name":"python"
}
},
{
"term":{
"age":18
}
}
]
}
}
}
# name="python" age=18
es.search(index="my_index",doc_type="test_type",body=body)
#
body = {
"query":{
"match_all":{}
}
"from":2 #
"size":4 # 4
}
# 2 , 4
es.search(index="my_index",doc_type="test_type",body=body)
#範囲クエリー
body = {
"query":{
"range":{
"age":{
"gte":18, # >=18
"lte":30 # <=30
}
}
}
}
# 18<=age<=30
es.search(index="my_index",doc_type="test_type",body=body)
#接頭辞クエリー
body = {
"query":{
"prefix":{
"name":"p"
}
}
}
# " "
es.search(index="my_index",doc_type="test_type",body=body)
#ワイルドカードクエリ
body = {
"query":{
"wildcard":{
"name":"*id"
}
}
}
# name id
es.search(index="my_index",doc_type="test_type",body=body)
#ソート#ソート#
body = {
"query":{
"match_all":{}
}
"sort":{
"age":{ # age
"order":"asc" # asc ,desc
}
}
}
#filter_path応答フィルタ#は取得するだけです.idデータは、複数の条件でesをカンマで区切る.search(index="my_index",doc_type="test_type",filter_path=["hits.hits._id"])#すべてのデータesを取得する.search(index="my_index",doc_type="test_type",filter_path=["hits.hits.*]])#countはクエリを実行し、そのクエリのマッチング数#取得データ量esを取得する.count(index="my_index",doc_type="test_type")#メトリッククラス集約最小値取得
body = {
"query":{
"match_all":{}
},
"aggs":{ #
"min_age":{ # key
"min":{ #
"field":"age" # "age"
}
}
}
}
# , age
es.search(index="my_index",doc_type="test_type",body=body)
最大値の取得
body = {
"query":{
"match_all":{}
},
"aggs":{ #
"max_age":{ # key
"max":{ #
"field":"age" # "age"
}
}
}
}
# , age
es.search(index="my_index",doc_type="test_type",body=body)
取得と
body = {
"query":{
"match_all":{}
},
"aggs":{ #
"sum_age":{ # key
"sum":{ #
"field":"age" # age
}
}
}
}
# , age
es.search(index="my_index",doc_type="test_type",body=body)
body = {
"query":{
"match_all":{}
},
"aggs":{ #
"avg_age":{ # key
"sum":{ #
"field":"age" # age
}
}
}
}
# , age
es.search(index="my_index",doc_type="test_type",body=body)