es数据库查询API
1.背景
ES数据库是非关系型数据库
2.ES数据库优点
1.存储优化
内存中使用有限状态机FST优化
本质上是前缀树加上后缀树的结合,利用这个数据结构可以把Term更节省内存地放置并查询,它有着字典树的查询时间复杂度,但是由于做了后缀合并会更节约内存
传统Bitmap优化
使用Bitmap来记录文档的Id,每个bit对应一个文档,表示它是否存在。
2.联合查询优化
若要对多个term做联合查询,比如做AND来查询,实际上便是联合各个term产生的跳表Skip-list做查询
Term Query中使用AND操作就是利用跳表来做联合查询。比如搜索Term为Address中同时包含关键字Road和District的文章,就可以找到二者的倒排然后选取短的序列用作遍历,长的用作构造跳表,随后只要遍历短的列表里的文章逐个去跳表里寻找就可以了
3.算法
ES数据库中集成了数据分析器Analyzer,例如Charater Filter(特殊字符替换) -> Tokenizer(分词) -> Token Filter(每个词处理)
在数据分析,自然语言处理中非常常见
4.ES数据库集群化,分片,主从备份机制,容灾能力
3.ES数据库缺点
1.浪费空间
由于ES数据库采用文档Id分布,当文档很稀疏时,将会很浪费空间
4.ES数据库restful操作
域名:127.0.0.1:9200
操作的index: twitter
注意如果index未定义mapping,会根据你当前的数据结构,自动定义mapping,
1.根据_id写入数据,如果存在则无法写入PUT twitter/_create/1{"user" : "kimchy","post_date" : "2009-11-15T14:12:12","message" : "trying out Elasticsearch"}2. 根据_id更新数据或写入数据(不会报错,整体更新)PUT twitter/_doc/1?timeout=5m{"user" : "kimchy","post_date" : "2009-11-15T14:12:12","message" : "trying out Elasticsearch"}timeout=5m 这里设置超时操作3.增量式写入数据(自动将生成随机_id)POST twitter/_doc/{"user" : "kimchy","post_date" : "2009-11-15T14:12:12","message" : "trying out Elasticsearch"}4.根据_id查询数据GET twitter/_doc/0?_source=false_source=false 表示将数据屏蔽调_source_includes=message,post_date 表示加载的数据资源GET twitter/_source/1?_source_includes=message,post_date_source_includes=message,post_date 表示加载的数据资源5.根据_id删除数据DELETE /twitter/_doc/1?timeout=5m6.更新数据中某字段POST /twitter/_update/1{"doc" : {"user" : "lijiacai","age": 12},"detect_noop": false,"doc_as_upsert" : true}"detect_noop": false 如果在发送请求之前name是new_name,那么将忽略整个更新请求。如果请求被忽略,则响应中的result元素返回noopdoc_as_upsert: true 表示存在则更新该字段,不存在则插入7.根据条件批量获取数据GET /twitter/_mget 或者 /twitter/_doc/_mget其中_index 与url中的twitter对应,如果url未给出则参数中给出,反之url中给出,以下接口同理{"docs" : [{"_index" : "twitter","_type" : "_doc","_id" : "1"},{"_index" : "twitter","_type" : "_doc","_id" : "2"}]}8.根据条件批量筛选字段GET /test/_mget{"docs" : [{"_id" : "1"},{"_id" : "2","_source" : {"include": ["others"],"exclude": ["others.name"]}}]}include 包含字段exclude 不包含字段9.批量写POST _bulk{ "index" : { "_index" : "test", "_id" : "1" } }{ "field1" : "value1" }{ "delete" : { "_index" : "test", "_id" : "2" } }{ "create" : { "_index" : "test", "_id" : "3" } }{ "field1" : "value3" }{ "update" : {"_id" : "1", "_index" : "test"} }{ "doc" : {"field2" : "value2"} }注意这里格式,是多级结构得字典,传入参数是以换行符区分的10.按条件删除数据POST twitter,other_index/_delete_by_query{"query": { "match": {"message": "some message"}}}可以给多个index表11.根据条件查询数据POST /twitter/_search{"query": {"bool" : {"must" : {"query_string" : {"query" : "some query string here"}},"filter" : {"term" : { "user" : "kimchy" }}}}}12.请求body查询其他参数见:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.htmlGET /twitter/_search{"query" : {"term" : { "user" : "kimchy" }}}13.查询表结构GET /twitter/_mapping14.查询集群状态GET /_cluster/health15.查询index映射关系GET /_cat/aliases?v16.查询集群文档数量GET /_cat/count?v17.query查询URIGET /twitter/_search?q=field: value多个字段 使用AND 或者 OR参数:sort,from,size,q,_source等详情参照文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html
18.查询index的文档数量GET /twitter/_count?q=user:kimchy,
es数据库查询API相关推荐
- elasticsearch(es)高级查询api
yml配置 #es配置 spring:elasticsearch:rest:uris: 192.168.16.188:9200 添加依赖 <dependency><groupId&g ...
- geoip java api_利用GeoIP数据库及API进行地理定位查询 Java
地理定位查询的的数据库比较多,而且大多都开放一些free的版本 国内的有纯真数据库等,但是他只提供文本的地理位置信息,不提供经纬度数据 当应用到google map时,就不可以了 国外的有MaxMin ...
- appinventor连接MySQL_APPInventor网络数据库浏览器(TinyWebDB查询API)
APPInventor网络数据库浏览器(TinyWebDB查询API) APP Inventor中的网络数据库TinyWebDB只能够查询单个Tag,返回单个Value,虽然可以用列表,但还是很不方便 ...
- 普罗米修斯使用es数据库_用普罗米修斯和格拉法纳仪法来豪猪
普罗米修斯使用es数据库 Adam Bien的Porcupine库使配置充当应用程序隔板的专用执行程序服务变得容易. 我创建了一个扩展,通过MicroProfile Metrics公开了豪猪统计信息. ...
- 【elasticsearch】ES数据库重建索引 -- Reindex(数据迁移)
1.应用背景: 1.当你的数据量过大,而你的索引最初创建的分片数量不足,导致数据入库较慢的情况,此时需要扩大分片的数量,此时可以尝试使用Reindex. 2.当数据的mapping需要修改,但是大量的 ...
- 用SpringBoot整合ES数据库基础
一.SpringBoot整合ES数据库 1.配置原生的依赖. <properties><java.version>1.8</java.version><!-- ...
- Elasticsearch(es) 查询语句语法详解
Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL.Elasticsearch 查询分类大致分为全文查询.词项查询.复合查 ...
- es 安装以及api
一.引言 1.1 海量数据 在海量数据中执行搜索功能时,如果使用MySQL,效率太低 1.2 全文检索 在海量数据中执行搜索功能时,如果使用MySQL,效率太低 1.3 高亮显示 想将搜索关键字,以红 ...
- ES基本查询语句教程
前言 es是什么? es是基于Apache Lucene的开源分布式(全文)搜索引擎,,提供简单的RESTful API来隐藏Lucene的复杂性. es除了全文搜索引擎之外,还可以这样描述它: 1. ...
最新文章
- php安装redis扩展模块
- MyEclipse 的 TCP/IP Monitor 的使用
- css鼠标移入线条延中心伸长,css动画效果:鼠标移上去底部线条从中间往两边延伸 - 子成君-分享出去,快乐加倍!-旧版已停更...
- python函数:基础函数调用整理
- 长春学校计算机科学技术学院,长春大学计算机科学技术学院
- 基于Android的智能家居手持终端系统开发 毕业论文-A
- JavaScript自学笔记(1)---表单验证,let和const,JSON文件
- 深度学习《VAE-GAN》
- SpringCloud与SpringConfig分布式配置中心
- php 图片服务器搭建,php图像裁剪服务器搭建
- 手机圈老兵任伟光加盟联想
- 方法、脚本-Pig Grunt之简单命令及实例说明-by小雨
- HDU 3466 Proud Merchants 带有限制的01背包问题
- flash提示版本过低导致无法安装解决方法
- coldfusion php,在Coldfusion中加密,然后在PHP中解密
- Gitter:高颜值GitHub小程序客户端诞生记
- 手机安装pem_手机安装Charles证书
- 基于JavaSSM和微信小程序的智能二维码门禁管理系统
- 虚拟接口和SD-WAN
- 重启数据库服务器后数据库无法连接的解决方法