es数据库查询API「建议收藏」

es数据库查询API「建议收藏」1.背景ES数据库是非关系型数据库2.ES数据库优点1.存储优化内存中使用有限状态机FST优化本质上是前缀树加上后缀树的结合,利用这个数据结构可以把Term更节省内存地放置并查询,它有着字典树的查询时间复杂度,但是由于做了后缀合并会更节约内存传统Bitmap优化使用Bitmap来记录文档的Id,每个bit对应一个文档,表示它是否存在。2.联合查询优化若要对多个t…

大家好,又见面了,我是你们的朋友全栈君。

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=5m

6.更新数据中某字段
	POST /twitter/_update/1
	{
	    "doc" : {
	        "user" : "lijiacai",
	        "age": 12
	    },
	    "detect_noop": false,
	    "doc_as_upsert" : true
	}
	"detect_noop": false  如果在发送请求之前name是new_name,那么将忽略整个更新请求。如果请求被忽略,则响应中的result元素返回noop
	doc_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.html
	GET /twitter/_search
	{
	    "query" : {
	        "term" : { "user" : "kimchy" }
	    }
	}
 
 13.查询表结构
	GET /twitter/_mapping
 
 14.查询集群状态
	GET /_cluster/health

15.查询index映射关系
	GET /_cat/aliases?v

16.查询集群文档数量
	GET /_cat/count?v

17.query查询URI
	GET /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,

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141959.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • c语言入门教程–-14二维数组

    c语言入门教程–-14二维数组

  • MPLS TE原理基础和配置

    MPLS TE原理基础和配置

  • Linux 硬盘分区生效命令partprobe[通俗易懂]

    Linux 硬盘分区生效命令partprobe[通俗易懂]在Linux中使用fdisk命令进行分区时,有时会遇到“WARNING:Re-readingthepartitiontablefailedwitherror16:Deviceorresourcebusy.Thekernelstillusestheoldtable.Thenewtablewillbeusedatthenextreboot.”这种告…

    2022年10月21日
  • pycharm 重装后双击无反应的一种解决方法

    pycharm 重装后双击无反应的一种解决方法问题描述之前安装的2018版本的pycharm,更新失败之后自动删除,所以重装了一个2020.1,然后发现双击无反应。解决方法用下面方法解决后,记录一下过程:在“添加和删除程序”中发现了pycharm2018版本的程序名,但目录文件已被删除。于是通过注册表编辑器(cmd输入regedit),在编辑→查找中查找pycharm发现了pycharm2018项,将其删除后添加或删除程序里…

  • ios uiview和calayer_ipad的assistive touch在哪里

    ios uiview和calayer_ipad的assistive touch在哪里IOS笔记CALayer的position和anchorPointCALayer有2个非常重要的属性:position和anchorPoint@propertyCGPointposition;用来设置CALayer在父层中的位置以父层的左上角为原点(0,0)@propertyCGPointanchorPoint;称为”定位点”,“锚点”决定着CALayer身上的哪个点会在poistion属性所指的位置以自己的左上角为原点(0,0)它的x,y取值范围都是0~1默认值为(0.5,0.

  • 海思h264解码库

    海思h264解码库海思的dll,解码h264 解码后转出yuv12dll自己百度下载 hi_h264dec.dll  hi_h264dec_w.dll 调用方法:if(H264Dec.Hi264DecAU(_decHandle,pH264Data,frameLen,0,ref_decodeFrame,0)==0) pH264Data是h264帧的句柄,frameLen…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号