首页 文章 精选 留言 我的

精选列表

搜索[Elasticsearch],共4111篇文章
优秀的个人博客,低调大师

ElasticSearch学习笔记1-修改文档

本文中所有用[]括起来的和xxx都是变量 基本操作:1、根据id修改文档,使用POST请求 POST /[index]/[type]/[id]/_update { "doc": {"[XXX]":"[xxxxx]"} } 举例: 上面这个图片中index为test,type为doc,id为1,我们将里面的name改为“name03” age改为20,请求如下: POST /test/doc/_update { "doc": { "name": "name03", "age": 20 } } 返回结果为: { "_index": "test", "_type": "doc", "_id": "1", "_version": 13, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 13, "_primary_term": 1 } 对该id再进行一次查询,结果如图所示: 2、使用脚本修改 POST /[index]/[type]/[id]/_update { "script" : "ctx._source.[xxx] = [xxx]" } 继续使用上面的文档 POST /test/doc/1/_update { "script":"ctx._source.age+=5;ctx._source.name=\"name04\"" } 查询结果:修改成功。3、删除 DELETE /[index]/[type]/[id] 比较简单,不做举例4、批量创建批量创建和批量修改的请求都是一样的, 传的参数不一样请求: POST /[index]/[type]/_bulk 批量创建参数:{"index":{"_id":"xxx"}}{"xxx": "xxx" }{"index":{"_id":"xxx"}}{"xxx": "xxx" } 举例: POST /test01/doc01/_bulk {"index":{"_id":"1"}} {"name": "name01" } {"index":{"_id":"2"}} {"name": "name02","age":20 } {"index":{"_id":"3"}} {"name": "name03","age":20 } --------------1 这里有一点要注意:在图中1的位置,后面一定要换行,否则会报错,提示需要新的一行作为结束的标识,报错信息如下 { "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "The bulk request must be terminated by a newline [\n]" } ], "type": "illegal_argument_exception", "reason": "The bulk request must be terminated by a newline [\n]" }, "status": 400 } 注意上面两张图片中最左边序号的不同,下面是正确的json数据,体会什么叫以新的一行作为结束的标识。 这种操作实际上是id存在就更新,不存在就创建,返回结果如下: { "took": 162, "errors": false, "items": [ { "index": { "_index": "test01", "_type": "doc01", "_id": "1", "_version": 6, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 5, "_primary_term": 1, "status": 200 } }, { "index": { "_index": "test01", "_type": "doc01", "_id": "2", "_version": 2, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1, "status": 200 } }, { "index": { "_index": "test01", "_type": "doc01", "_id": "3", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1, "status": 201 } } ] } 查看下这三个id的具体内容: 5、批量修改参数: {"update":{"_id":"xxx"}} {"doc": { "XXX": "xxx" } } {"delete":{"_id":"xxx"}} 现在对上面创建的三条记录做批量修改: POST /test01/doc01/_bulk {"update":{"_id":"1"}} {"doc": { "name": "name011"}} {"delete":{"_id":"2"}} {"update":{"_id":"3"}} {"script": "ctx._source.age+=5;ctx._source.name=\"name033\""} -----------1 和批量创建一样,最后一行需要换行。查询索引test01的数据如下:数据全部修改成功!

优秀的个人博客,低调大师

阿里云Elasticsearch 三大IP设置

前言 目前很多用户在阿里云es设置白名单都会比较迷糊,或者没有详细阅读官方文档设置错误,这里给大家梳理一下三大ip设置操作:ip白名单/ip黑名单,Kibana访问白名单,公网地址访问白名单 ip白名单/ip黑名单: 具体参考官网文档:https://help.aliyun.com/document_detail/67848.html?spm=a2c4g.11186623.6.554.FRJsh8 这里要说明如下两点内容: 阿里云ES实例提供了商业版的 X-pack 插件,在使用阿里云ES实例内网地址访问相应Node时,增加了进一步的安全控制,用户可以通过配置IP黑/白名单的方式来控制对阿里云ES实例访问。注意:主要针对内网地址(VPC)访问控制。通过内网地址来访问阿里云ES实例,如果一个节点的IP地址在IP黑名单上,X-Pack的安全性仍然允许该节点被链接,但请求将被直接抛弃不会被处理。 -------重点字样:内网地址,没错这个是用于内网地址ip控制的。 优先级允许规则优先于拒绝规则。 -------如果想只允许少数ip访问,那么就需要黑白名单搭配使用,黑名单_all 设置,然后白名单配置允许访问ip。 Kibana访问白名单 具体参考官网文档:https://help.aliyun.com/document_detail/86330.html?spm=a2c4g.11186623.6.557.0IvuU2 这个没有没有特殊操作,就是配置Kibana访问的。主要在无法访问Kibana重点关注这个。 支持配置单个IP或IP网段的形式,格式为192.168.0.1或192.168.0.1/24,多个IP之间用英文逗号隔开。注意: Kibana访问白名单,默认允许所有公网地址访问。 Kibana访问白名单设置为 127.0.0.1,代表禁止所有地址访问。 kibana访问控制只支持白名单。 公网地址访问白名单 具体参考官网文档:https://help.aliyun.com/document_detail/86330.html?spm=a2c4g.11186623.6.557.0IvuU2 很多用户无法通过公网地址访问,主要就是没有配置公网地址访问白名单或者配置错误了ip。 重点强调0.0.0.0是没有效果,为了集群安全不允许这样设置。 小技巧:建议使用 http://ip.aliyun.com/ 确认服务器ip。 公网地址开关按钮为绿色时表示启用,默认是关闭状态。公网地址访问白名单支持配置单个IP或IP网段的形式,格式为192.168.0.1或192.168.0.1/24,多个IP之间用英文逗号隔开。注意:公网地址访问白名单默认为 127.0.0.1,代表禁止所有地址访问。公网地址访问控制只支持白名单。不支持配置允许所有地址访问。 重要截图: 设置地方一定要正确哟,截图如下:

优秀的个人博客,低调大师

ElasticSearch常用的基本查询语句详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81074467 1、term 过滤 term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经切词的文本数据类型): { "term": { "date": "2017-07-01" }} { "term": { "title": "内蒙古" }} 完整的例子, hostname 字段完全匹配成 saaap.wangpos.com 的数据: { "query": { "term": { "title": "内蒙古" } } } 2、terms 过滤 terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配: { "terms": {"title": [ "内蒙古", "黑龙江" ] } } 完整的例子,所有文章标题是 内蒙古 或黑龙江的 的, { "query": { "terms": { "title": [ "内蒙古", "黑龙江" ] } } } 3、range 过滤 range过滤允许我们按照指定范围查找一批数据: { "range": { "pubTime": { "gt": "2017-06-25", "lt": "2017-07-01" } } } 范围操作符包含: gt :: 大于 gte:: 大于等于 lt :: 小于 lte:: 小于等于 一个完整的例子, 查询发表时间在2017-06-25和2017-07-01之间的数据 { "query": { "range": { "pubTime": { "gt": "2017-06-25", "lt": "2017-07-01" } } } } 4、exists 和 missing 过滤 exists 和 missing 过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件. { "exists": { "field": "title" } } 这两个过滤只是针对已经查出一批数据来,但是想区分出某个字段是否存在的时候使用。 5、bool 过滤 bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符: must :: 多个查询条件的完全匹配,相当于 and。 must_not :: 多个查询条件的相反匹配,相当于 not。 should :: 至少有一个查询条件匹配, 相当于 or。 这些参数可以分别继承一个过滤条件或者一个过滤条件的数组: { "bool": { "must": { "term": { "folder": "inbox" }}, "must_not": { "term": { "tag": "spam" }}, "should": [ { "term": { "starred": true }}, { "term": { "unread": true }} ] } } 6、match_all 查询 可以查询到所有文档,是没有查询条件下的默认语句。 { "match_all": {} } 此查询常用于合并过滤条件。 比如说你需要检索所有的邮箱,所有的文档相关性都是相同的,所以得到的_score为1. 7、match 查询 match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。 如果你使用 match 查询一个全文本字段,它会在真正查询之前用分析器先分析match一下查询字符: { "query": { "match": { "content": "韩国 上海 北京" } } } 如果用match下指定了一个确切值,在遇到数字,日期,布尔值或者not_analyzed 的字符串时,它将为你搜索你给定的值: { "match": { "age": 12}} { "match": { "pubTime": "2017-07-01" }} { "match": { "title": "韩国" }} 提示: 做精确匹配搜索时,你最好用过滤语句,因为过滤语句可以缓存数据。 match查询只能就指定某个确切字段某个确切的值进行搜索,而你要做的就是为它指定正确的字段名以避免语法错误。 8、multi_match 查询 multi_match查询允许你做match查询的基础上同时搜索多个字段,在多个字段中同时查一个: { "query": { "multi_match": { "query": "乌鲁木齐", "fields": [ "title", "content" ] } } } 查询文章标题和内容包含乌鲁木齐的数据 9、bool 查询 bool 查询与 bool 过滤相似,用于合并多个查询子句。不同的是,bool 过滤可以直接给出是否匹配成功, 而bool 查询要计算每一个查询子句的 _score (相关性分值)。 must:: 查询指定文档一定要被包含。 must_not:: 查询指定文档一定不要被包含。 should:: 查询指定文档,有则可以为文档相关性加分。 以下查询将会找到 title 字段中包含 "how to make millions",并且 "tag" 字段没有被标为 spam。 如果有标识为 "starred" 或者发布日期为2014年之前, { "bool": { "must": { "match": { "title": "how to make millions" }}, "must_not": { "match": { "tag": "spam" }}, "should": [ { "match": { "tag": "starred" }}, { "range": { "date": { "gte": "2014-01-01" }}} ] } } 提示: 如果bool 查询下没有must子句,那至少应该有一个should子句。但是 如果有must子句,那么没有should子句也可以进行查询。 10、wildcards 查询 使用标准的shell通配符查询 以下查询能够匹配包含W1F 7HW和W2F 8HW的文档: { "query": { "wildcard": { "postcode": "W?F*HW" } } } 又比如下面查询 hostname 匹配下面shell通配符的: { "query": { "wildcard": { "title": "乌鲁*" } } } 11、regexp 查询 假设您只想匹配以W开头,紧跟着数字的邮政编码。使用regexp查询能够让你写下更复杂的模式: GET /my_index/address/_search { "query": { "regexp": { "postcode": "W[0-9].+" } } } 这个正则表达式的规定了词条需要以W开头,紧跟着一个0到9的数字,然后是一个或者多个其它字符。 下面例子是所有以 wxopen 开头的正则 { "query": { "regexp": { "hostname": "wxopen.*" } } } 12、prefix 查询 以什么字符开头的,可以更简单地用 prefix,如下面的例子: { "query": { "prefix": { "title": "屠杀" } } } 13、短语匹配(Phrase Matching) 当你需要寻找邻近的几个单词时,你会使用match_phrase查询: { "query": { "match_phrase": { "content": "端午 旅游 云南" } } } 和match查询类似,match_phrase查询首先解析查询字符串来产生一个词条列表。然后会搜索所有的词条, 但只保留含有了所有搜索词条的文档,并且词条的位置要邻接。 match_phrase查询也可以写成类型为phrase的match查询: { "query": { "match": { "content": { "query": "端午 旅游 云南", "type": "phrase" } } } } 搜索结果如

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册