python操作ES的三种办法

python操作ES的三种办法

1 使用requests模块

import requests

data = {
    "name": "大娘子",
    "age": 18,
    "from": "sheng",
    "desc": "肤白貌美,娇憨可爱",
    "tags": ["白", "富", "美"]
}

res = request.put('http://127.0.0.1:9200/lqz/_doc/6', json=data)
print(res.text)

2 使用官方提供的包

# 推荐使用  elasticsearch  需要注意版本问题
from elasticsearch import Elasticsearch

client = Elasticsearch("http://localhost:9200")
print(client.info) # es信息

# 创建索引
result = client.indices.create(index='user')
print(result)
# 删除索引
result = client.indices.delete(index='user')
print(result)

# 更新数据  必须的用
'''
不用doc包裹会报错
ActionRequestValidationException[Validation Failed: 1: script or doc is missing
'''

data = {'doc': {'userid': '1', 'username': 'lqz', 'password': '123ee', 'test': 'test'}}
result = client.update(index='news', doc_type='_doc', body=data, id=1)
print(result)

# 删除数据             
result = client.del
print(result) 

# 查询           查询 原生咋查,这里就可以咋用                                     
# 查找所有文档                                             
query = {'query': {'match_all': {}}}                 
#  查找名字叫做lxx的所有文档                                    
query = {'query': {'term': {'name': 'lxx'}}}         
# 查找年龄大于11的所有文档                                      
query = {'query': {'range': {'price': {'gt': 100}}}} 
allDoc = client.search(index='books',  body=query)   
print(allDoc)                                        

3 ORM包

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(fields={'title': Keyword()})
    author = Text()

    class Index:
        name = 'myindex'  # 索引名
        
if __name__ == '__main__':
    Article.init()  # 创建映射
    # 保存数据
    article = Article()
    article.title = "test"
    article.author = "lxx"
    article.save()  # 保存数据

    # 查询数据
    s=Article.search()
    s = s.filter('match', title="test")
    results = s.execute()
    print(results)

    # 删除数据
    s = Article.search()
    s = s.filter('match', title="test").delete()
    # 修改数据
    s = Article().search()
    s = s.filter('match', title="test")
    results = s.execute()
    print(results[0])
    results[0].title="xxx"
    results[0].save()        
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
利用Python操作Elasticsearch可以使用elasticsearchelasticsearch-dsl这两个库,也可以使用更为简单的es-pandas库。其中,elasticsearch库提供了与Elasticsearch交互的低级接口,而elasticsearch-dsl库则提供了更高级别的查询构建器和对象映射器。es-pandas库则提供了一种将Elasticsearch数据转换为pandas DataFrame的简单方法。 以下是一个使用elasticsearch库进行查询的例子: ```python from elasticsearch import Elasticsearch # 连接到Elasticsearch es = Elasticsearch() # 查询所有文档 res = es.search(index="my_index", body={"query": {"match_all": {}}}) # 输出结果 for hit in res['hits']['hits']: print(hit['_source']) ``` 以下是一个使用elasticsearch-dsl库进行查询的例子: ```python from elasticsearch import Elasticsearch from elasticsearch_dsl import Search # 连接到Elasticsearch es = Elasticsearch() # 创建查询对象 s = Search(using=es, index="my_index").query("match", title="python") # 执行查询并输出结果 response = s.execute() for hit in response: print(hit.title) ``` 以下是一个使用es-pandas库将Elasticsearch数据转换为pandas DataFrame的例子: ```python from es_pandas import es_pandas # 将Elasticsearch数据转换为pandas DataFrame df = es_pandas.DataFrame({ "host": {"field": "host.keyword"}, "response": {"field": "response_time_ms"}, "timestamp": {"field": "@timestamp", "dtype": "datetime64[ns]"} }, es_url="http://localhost:9200", es_index_pattern="my_index-*") # 输出DataFrame print(df.head()) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go&Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值