python操作elasticsearch增、删、改、查

时间:2022-08-27 11:20:32

 最近接触了个新东西——es数据库

 这东西虽然被用的很多,但我是前些天刚刚接触的,发现其资料不多,学起来极其痛苦,写个文章记录下

导入库
from elasticsearch import Elasticsearch

启动起来
python操作elasticsearch增、删、改、查

  默认9200端口是数据库端口,因为要用python操作其它的图形化就省略了。这里不要太纠结于es的数据格式,它就是个大字典。

 

 基础数据格式

  python操作elasticsearch增、删、改、查

  这里我们存的数据是在_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增、删、改、查的更多相关文章

  1. php5.4以上 mysqli 实例操作mysql 增,删,改,查

    <?php //php5.4以上 mysqli 实例操作mysql header("Content-type:text/html;charset=utf8"); $conn ...

  2. 好用的SQL TVP~~独家赠送&lbrack;增-删-改-查&rsqb;的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  3. iOS sqlite3 的基本使用&lpar;增 删 改 查&rpar;

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  4. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  5. iOS FMDB的使用&lpar;增&comma;删&comma;改&comma;查&comma;sqlite存取图片&rpar;

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  6. ADO&period;NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存*程序调用 ADO.NET所有数据访 ...

  7. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  8. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  9. 简单的php数据库操作类代码&lpar;增&comma;删&comma;改&comma;查&rpar;

    这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...

随机推荐

  1. &lbrack;翻译&rsqb;开发文档:android Bitmap的高效使用

    内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...

  2. Spring JavaMail发送邮件

    JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.   虽然JavaMail是 ...

  3. Windows下将nginx安装为服务运行

    今天看到nginx这个小服务器软件正式版更新到了1.4.2,想玩下它.这个服务器软件虽小,但功能强大,是开源软件,有着良好的性能,被很多个人.企业,甚至大型企业所使用! 由于是在Windows下,所以 ...

  4. 基于MVC4&plus;EasyUI的Web开发框架经验总结(6)--在页面中应用下拉列表的处理

    在很多Web界面中,我们都可以看到很多下拉列表的元素,有些是固定的,有些是动态的:有些是字典内容,有些是其他表里面的名称字段:有时候引用的是外键ID,有时候引用的是名称文本内容:正确快速使用下拉列表的 ...

  5. Error:&ldquo&semi;应用程序无法正常启动&lpar;0xc000007b&rpar;。请单击&ldquo&semi;确定&rdquo&semi;关闭应用程序。&rdquo&semi;

    我的电脑是 win7 64bit,用 VS2012 跑网上下载的程序,Realease | x64 模式下出现该错误. 问题出在 freeglut.dll 是 32bit 下的 dll,需要换成 64 ...

  6. 【leetcode】Find Minimum in Rotated Sorted Array II JAVA实现

    一.题目描述 Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed ...

  7. JsRender系列-11

    <!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...

  8. beta分布

    http://blog.csdn.net/sweetrryy/article/details/6436358

  9. 一起学微软Power BI系列-使用技巧&lpar;6&rpar; 连接Sqlite数据库

    好久没有研究Power BI了,看到高飞大神弄的东西,太惭愧了.今天有个小东西,数据在Sqlite里面,想倒腾到Power BI Desktop里面折腾一下,结果发现还不直接支持.所以只好硬着头皮上去 ...

  10. 在linux中查看进程占用的端口号

    在Linux 上的 /etc/services 文件可以查看到更多关于保留端口的信息. 可以使用以下六种方法查看端口信息. ss:可以用于转储套接字统计信息. netstat:可以显示打开的套接字列表 ...