python操作elasticsearch增、删、改、查
最近接触了个新东西——es数据库
这东西虽然被用的很多,但我是前些天刚刚接触的,发现其资料不多,学起来极其痛苦,写个文章记录下
导入库
from elasticsearch import Elasticsearch
启动起来
默认9200端口是数据库端口,因为要用python操作其它的图形化就省略了。这里不要太纠结于es的数据格式,它就是个大字典。
基础数据格式

这里我们存的数据是在_source字段中的,_index比较重要,类似于mysql中的database,其它不用管都是自动生成。(这条是怎么搜索出来的看下面)
增加
先创建数据库连接:
es_host = "127.0.0.1:9200"
es = Elasticsearch([es_host])
创建数据库:
es.indices.create(index="ip")
增加数据:
ip_body = {
"ip": "127.0.0.2",
"port": "81",
"finger": " weblogic",
"os": "windows",
"tag": "yidong",
"updateTime": ""
}
es.index(index="ip",body=ip_body)
增加的数据只要是字典格式就可以了,或者说json格式。但是最好不要使用复合json,
虽然存的时候没问题,但是查询时会有麻烦,我没解决,哪位大佬知道请告诉我。
删除
es.delete(index="ip",id="xxxxxx")
id就是查询到字典中的'_id'的内容
删除直接用id去索引比较方便,因为是唯一的20位字符组成的,这也是不建议自己设置id的原因
es.indices.delete(index="ip")
这样的话就直接删除数据库了
查找
这里是比较麻烦的点,对于用惯mysql的我是最恶心的地方!
首先我们看一下查找全部数据,类似于select *:
es.search(index=types, body={"query":{"match_all":{}}})
这样就是搜索全部数据的语句。
然后其它的搜索语句有很多组合方式,但我觉得都没啥实用的,因为不做搜索引擎吧
我这里只用了模糊和复合搜索就实现了全部功能,可能以后大小于的搜索也会有用
其实这里搜索语句就是改变body中的内容,但格式很恶心,我们单独拿出来看看:
body= {
"query":{
"bool":{"must":[{"prefix": {"url":"127"}},
{"prefix": {"status":"2"}}]
}
}
}
es.search(index="ip", body=body)
这个body里首先要搜索"query"是固定格式,然后bool代表复合搜索,
must代表条件必须(当然还有must not等),prefix代表模糊搜索,最后是搜索内容
在must里是一个list,list里嵌套模糊搜索的字典,当然可以在bool里加入其它条件,在条件里加入其它形式的搜索
很难受对吧。所以这种格式不能直接让前端传,你得加自己的处理函数。
而且这里不能搜索复合json中的值,语法会报错,我不知道如何解决。
更新
更新的格式也差不多,而且资料很少,我找到了一种解决方式,大家可以自由发挥。
利用painless(https://blog.csdn.net/u013613428/article/details/78134170/)是比较方便的,配合_id的唯一特性去修改值:
update_test={
"script": {
"lang":"painless",
"source": "ctx._source.tag=params.tag;",
"params":{"tag":"aaa","ip":"10.10.1.1"}
}
}
es.update(index="ip",id="xxxxxxx",body=update_test)
这里的script和"lang":"painless"都是固定格式
source字段中ctx._source是固定格式,代表搜索数据库中source字段,后接key名,=号后面params.key名很好理解
最后是要修改的params和值。
我这是快速上手的一个方式,具体的es原理没看,
如果哪位大佬理解的比较深刻有更好的方式提供或有解决复合json的方案欢迎联系我!
python操作elasticsearch增、删、改、查的更多相关文章
- php5.4以上 mysqli 实例操作mysql 增,删,改,查
<?php //php5.4以上 mysqli 实例操作mysql header("Content-type:text/html;charset=utf8"); $conn ...
- 好用的SQL TVP~~独家赠送[增-删-改-查]的例子
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- iOS sqlite3 的基本使用(增 删 改 查)
iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...
- django ajax增 删 改 查
具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...
- iOS FMDB的使用(增,删,改,查,sqlite存取图片)
iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...
- ADO.NET 增 删 改 查
ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...
- MVC EF 增 删 改 查
using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...
- python基础中的四大天王-增-删-改-查
列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...
- 简单的php数据库操作类代码(增,删,改,查)
这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...
随机推荐
- 针对Spring MVC的Interceptor内存马
针对Spring MVC的Interceptor内存马 目录 针对Spring MVC的Interceptor内存马 1 基础拦截器和调用流程的探索 1.1 基础拦截器 1.2 探索拦截器的调用链 1 ...
- A100计算能力
A100计算能力 A100 GPU支持新的计算功能8.0.表1比较了NVIDIA GPU架构的不同计算功能的参数. 表1.计算能力:GP100 vs. GV100 vs. GA100. MIG架构 尽 ...
- Yolov3&Yolov4网络结构与源码分析
Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 1. 论 ...
- JUC 并发编程--09, 阻塞队列: DelayQueue, PriorityBlockingQueue ,SynchronousQueue, 定时任务线程池: ScheduledThreadPoolExecutor
先看DelayQueue 这个是用优先级队列实现的无界限的延迟队列,直接上代码: /** * 这个是 {@link DelayQueue} 延时队列 的验证使用类 */ class MyDelayed ...
- JUC 并发编程--04 常用的辅助类CountDownLatch , CyclicBarrier , Semaphore , 读写锁 , 阻塞队列,CompletableFuture(异步回调)
CountDownLatch 相当于一个减法计数器, 构造方法指定一个数字,比如6, 一个线程执行一次,这个数字减1, 当变为0 的时候, await()方法,才开始往下执行,, 看这个例子 Cycl ...
- 1482. 制作 m 束花所需的最少天数
2021-05-09 LeetCode每日一题 链接:https://leetcode-cn.com/problems/minimum-number-of-days-to-make-m-bouquet ...
- 【NX二次开发】Block UI 树列表
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- 【VBA】最大行,最大列
最大行: Range("B" & Cells.Rows.Count).End(xlUp).Row 最大列 colu = Range("XFD2").En ...
- 【SQLite】SQLite文件突然变大怎么办?瘦身办法
使用VACUUM命令即可: VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件.这消除了空闲页,把表中的数据排列为连续的,另外会清理数 ...
- Kubernetes 实战——有状态应用(StatefulSet)
一.简介 有状态实例:新实例和旧实例需要有相同的名称.网络标识和状态 无状态实例:可随时被替换 1. ReplicaSet 和有状态 Pod ReplicaSet 通过 Pod 模板创建多个 Pod ...
