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 ...
随机推荐
- C# DeepClone 深拷贝
常规利用反射进行克隆 public static T CloneModel<T>(T oModel) { var oRes = default(T); var oType = typeof ...
- Python保留指定位数的小数
Python保留指定位数的小数 1 '%.2f' %f 方法(推荐) f = 1.23456 print('%.4f' % f) print('%.3f' % f) print('%.2f' % f) ...
- ZooKeeper学习笔记二:API基本使用
Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...
- 为什么要用redux?
redux解决的是react组件之间通信以及项目的状态变量的保存问题.如果不使用redux,随着项目的越来越大,组件之间通信越来越复杂,组件的状态越来越多,项目将越来越难以维护.使用 ...
- MinkowskiEngine基准测试
MinkowskiEngine基准测试 介绍卷积层和小型U网络的前馈和后馈通过时间.可以将具有相同张量步幅,步幅和内核偏移的内核映射重新用于其他层,可以在大型nueral网络中使用的所有层上,分摊此页 ...
- servlet、过滤器、监听器、拦截器之间的关系和区别
一.概念 1.什么是servlet servlet是一个接口.定义了一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destr ...
- Rethinking Training from Scratch for Object Detection
Rethinking Training from Scratch for Object Detection 一. 概述 正常训练目标检测的流程分为以下几种: 在imagenet上进行预训练,然后在特定 ...
- RabbitMQ由浅入深入门全总结(一)
写在最前面 距离上一次发文章已经很久了,其实这段时间一直也没有停笔,只不过在忙着找工作还有学校结课的事情,重新弄了一下博客,后面也会陆陆续续会把文章最近更新出来~ 这篇文章有点长,就分了两篇Q PS: ...
- Java学习——强调一下编程风格
讲完了Java的基础语法,大家就可以编写简单的程序代码了,这里有必要强调一下编程风格. 代码风格虽然不影响程序的运行,但对程序的可读性却非常重要.自己编写的程序要让别人看懂,首先在排版方面要非常注意. ...
- jvm面试常提的问题
1.JVM如何加载一个类的过程,双亲委派模型中有哪些方法 类加载过程:加载.验证(验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害).准备(准备阶段为变量分配内存 ...
