最近接触了个新东西——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增、删、改、查的更多相关文章

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

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

  2. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

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

  3. iOS sqlite3 的基本使用(增 删 改 查)

    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的使用(增,删,改,查,sqlite存取图片)

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

  6. ADO.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数据库操作类代码(增,删,改,查)

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

随机推荐

  1. python报错“AttributeError: 'set' object has no attribute 'items'“

    作为才开始学爬虫的萌新,遇到了一个这样的错,很懵逼 后面到网络到处查看大佬的解决方法,才发现headers的请求头部信息有错误,headers是一个字典,不是字符串,所以报错了 原代码 headers ...

  2. docker部署安装流程第一版

    docker部署安装流程第一版 1.以Dockerfile的方式进行构建docker 以cloud 新联盟为例 dockerfile from hub.c.163.com/library/maven  ...

  3. Step By Step(Lua开篇)

    Step By Step(Lua开篇) 一.简介: Lua作为目前最为流行的.免费轻量级嵌入式脚本语言,在很多工业级的应用程序中被广泛应用,如Adobe's Photoshop,甚至是在一些著名的游戏 ...

  4. Mysql索引创建及删除

    1.索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的My ...

  5. TVM虚拟机配置

    TVM虚拟机配置 目录 3.1. Supported Guest Operating Systems 3.1.1. Mac OS X Guests 3.1.2. 64-bit Guests 3.2. ...

  6. H.264/H265码流解析

    H.264/H265码流解析 一.H.264码流解析 一个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成 一个原始的 ...

  7. CUDA C++程序设计模型

    CUDA C++程序设计模型 本章介绍了CUDA编程模型背后的主要概念,概述了它们在C++中的暴露方式.在编程接口中给出了CUDA C++的广泛描述. 使用的矢量加法示例的完整代码可以在矢量加法CUD ...

  8. SQL注入问题------JDBC编写简单登录代码

    一.什么是sql注入 sql注入:用户输入的内容, 有一些sql的特殊关键字参与字符串的拼接,完成了一条逻辑发生变化的新的SQL语句 !用代码举个例子简单说明一下: package cn.zhbit. ...

  9. 01:osi七层---基于TCP协议的套接字(socket)

    1 : osi 七层,tcp/ip 五层 1 cs架构和bs架构2 互联网3 osi七层 tcp/ip五层 -物理层   -网线.光纤        -数据链路层       -网卡        - ...

  10. Ajax(内含json)认识

    Ajax 认识 一.概念 1.Ajax 即"Asynchronous Javascript And XML"(英[eɪˈsɪŋkrənəs]异步 JavaScript 和 XML) ...