python操作es

32773 ワード

Elasticsearchはオープンソースの検索エンジンで、全文検索エンジンライブラリApache Luceneに構築されています.™ 基礎の上.Luceneは現在存在する可能性があります.オープンソースでもプライベートでも、最先端、高性能、全機能の検索エンジン機能を持つライブラリです.しかしLuceneはただのライブラリです.それを利用するには、Javaプログラムを作成し、javaプログラムにLuceneパッケージを直接統合する必要があります.さらに悪いことに、Luceneがどのように働いているのかを理解するには、情報検索をある程度理解する必要があります.Luceneは複雑です.前回のブログではElasticSearchの簡単な使い方を紹介していましたが、次にElasticSearchのクエリーを記録します:#indexインデックスを作成#インデックスを作成#インデックスの名前はmy-indexで、すでに存在している場合は400を返します.#このインデックスは今作成することも、後でデータを挿入するときに一時的に作成することもできます
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)