1. 程式人生 > 其它 >Python中整合es兩種方式

Python中整合es兩種方式

1、原生整合

# https://github.com/elastic/elasticsearch-py
# https://github.com/elastic/elasticsearch-dsl-py


# Official low-level client for Elasticsearch

### 等同於pymysql
pip3 install elasticsearch
    pip3 install elasticsearch-dsl


from elasticsearch import Elasticsearch

obj = Elasticsearch()   # 得到一個物件
# 建立索引(Index)
# result = obj.indices.create(index='user', body={"userid":'1','username':'lqz'},ignore=400) # print(result) # 刪除索引 # result = obj.indices.delete(index='user', ignore=[400, 404]) # 插入資料 # data = {'userid': '1', 'username': 'lqz','password':'123'} # result = obj.create(index='news', doc_type='_doc', id=1, body=data)
# print(result) # 更新資料 ''' 不用doc包裹會報錯 ActionRequestValidationException[Validation Failed: 1: script or doc is missing ''' # data ={'doc':{'userid': '1', 'username': 'lqz','password':'123ee','test':'test'}} # result = obj.update(index='news', doc_type='_doc', body=data, id=1) # print(result) # 刪除資料
# result = obj.delete(index='news', doc_type='_doc', id=1) # print(result) # 查詢 # 查詢所有文件 # query = {'query': {'match_all': {}}} # 查詢名字叫做jack的所有文件 query = {'query': {'match': {'title': '十個'}}} # 查詢年齡大於11的所有文件 # query = {'query': {'range': {'age': {'gt': 11}}}} allDoc = obj.search(index='books', doc_type='_doc', body=query) # print(allDoc) print(allDoc['hits']['hits'][0]['_source'])

2、dsl整合

# Elasticsearch DSL is a high-level

# pip3 install elasticsearch-dsl



from datetime import datetime
from elasticsearch_dsl import Document, Date, Nested, Boolean,analyzer, InnerDoc, Completion, Keyword, Text,Integer

from elasticsearch_dsl.connections import connections

connections.create_connection(hosts=["localhost"])


class Article(Document):
    title = Text(analyzer='ik_max_word')
    author = Text()

    class Index:
        name = 'myindex'

    def save(self, ** kwargs):
        return super(Article, self).save(** kwargs)


if __name__ == '__main__':
    # Article.init()  # 建立索引
    # 儲存資料
    # article = Article()
    # article.title = "測試測試阿斯頓傳送到發斯蒂芬啊啊士大夫阿斯蒂芬"
    # article.author = "lqz"
    # article.save()  # 資料就儲存了

    #查詢資料
    # s=Article.search()
    # s = s.filter('match', title="測試")
    #
    # results = s.execute()  # 執行
    # print(results[0].title)

    #刪除資料
    s = Article.search()
    s = s.filter('match', title="李清照").delete()

    #修改資料
    # s = Article().search()
    # s = s.filter('match', title="測試")
    # results = s.execute()
    # print(results[0])
    # results[0].title="李清照阿斯頓傳送到傳送阿斯蒂"
    # results[0].save()