elasticsearch 文档操作
文章目录
- single API
- 1.添加数据
- 2.更新数据
- PUT
- POST --此方式更零活,可指定修改指定字段
- 2.查询数据
- 简单查询--根据id查询
- 根据查询条件查询 --query string search
- 根据查询条件查询--query DSL
- 1.term/terms 过滤
- 2.range过滤
- 3.exists 和 missing 过滤
- 4.bool过滤
- 5.bool查询
- 6.bool嵌套查询
- 7.match_all 查询
- 8.match 查询
- 9.multi_match 查询
- 10.match_phrase 查询
- 11.phrase_prefix 查询
- 12.regexp 查询
- 13.高亮查询
- 14.分页查
- 15 返回指定字段
single API
PUT /spider/ # 创建索引
POST /spider/ # 并不能用于创建索引,报错
PUT /spider/movies/1/ # 插入document,索引为1,若数据存在,则为覆盖更新
POST /spider/movies/ # 插入文档,随机生成索引
HEAD /spider/ # 用于验证 索引或document是否存在,若存在则返回200状态码,不存在则返回404.
HEAD /spider/movies/1/
DELETE /spider/ # 删除索引
DELETE /spider/movies/1/ # 删除文档
1.添加数据
PUT /test03/user/1
{"name":"huyande","age":26,"desc":"我爱北京天安门","tags":["技术宅","温暖","友善"]
}
2.更新数据
PUT
PUT /test03/user/1
{"name":"张三","age":26,"desc":"我爱北京天安门","tags":["技术宅","温暖","友善"]
}
POST --此方式更零活,可指定修改指定字段
POST /test03/user/1/_update
{"doc":{"name":"李四"}
}
2.查询数据
简单查询–根据id查询
GET /test03/user/1
根据查询条件查询 --query string search
GET /test03/user/_search?q=name:huyande
GET /test_index/test_type/_search?q=+test_field:test #+是必须包含
GET /test_index/test_type/_search?q=-test_field:test #-是不包含
根据查询条件查询–query DSL
DSL:Domain Specified Language,特定领域的语言
http request body:请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法
1.term/terms 过滤
term主要用于精确匹配那些值,比如数字,日期,布尔值或者 not_analyzed的字符串(未经分析的文本数据)
terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配
查询是直接通过倒排索引指定的词条进程精确查找
GET /test03/user/_search
{"query": {"term":{"age":26}}
}
GET /test03/user/_search
{"query": {"terms":{"age":[26,286]}}
}
2.range过滤
range过滤允许我们按照指定范围查找一批数据
- gt 大于
- gte 大于等于
- lt 小于
- lte 小于等于
GET /test03/user/_search
{"query": {"range": {"age": {"gte": 20,"lt": 30}}}
}
3.exists 和 missing 过滤
exists 和 missing 过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件
# 将有name 字段的输出出来
GET /test03/user/_search
{"query": {"exists": {"field": "name"}}
}
4.bool过滤
- must :: 多个查询条件的完全匹配,相当于 and。
- must_not :: 多个查询条件的相反匹配,相当于 not。
- should :: 至少有一个查询条件匹配, 相当于 or。
# 查询年龄是26岁 name字段不是王的数据
GET /test03/user/_search
{"query": {"bool": {"must": [{"term": {"age": {"value": 26}}}],"must_not": [{"term": {"name": {"value": "王"}}}]}}
}
5.bool查询
bool 查询与 bool 过滤相似,用于合并多个查询子句。不同的是,bool 过滤可以直接给出是否匹配成功, 而bool 查询要计算每一个查询子句的 _score
GET /test03/user/_search
{"query": {"bool": {"must": [{"match": {"name": "王麻子"}}] }}
}
6.bool嵌套查询
#查询 年龄是26岁的 或者 名字叫张三的
GET /test03/user/_search
{"query": {"bool": {"should": [{"term": {"age": {"value": "26"}}},{"bool":{"must": [{"match": {"name": "张三"}}]}}] }}
}
7.match_all 查询
使用match_all 可以查询所有的文档 ,是没有条件下的默认查询语句
GET /test03/user/_search
{"query": {"match_all": {}}
}
8.match 查询
match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。
如果你使用 match 查询一个全文本字段,它会在真正查询之前用分析器先分析match一下查询字符
GET /test03/user/_search
{"query": {"match": {"desc":"北京天安门"}}
}
9.multi_match 查询
multi_match查询允许你做match查询的基础上同时搜索多个字段
#在name 和desc字段中搜索 ‘张三在北京’
GET /test03/user/_search
{"query": {"multi_match": { "query": "张三在北京","fields": ["name", "desc"],"type": "best_fields"}}
}
GET /test03/user/_search
{"query": {"multi_match": { "query": "张四爱北京","fields": ["name", "desc"],"type": "best_fields","tie_breaker": 0.3}}
}
#tie_breaker是将其它匹配的查询子句考虑进来也是可能的。通过指定tie_breaker参数将其它每个匹配的子句的分值乘以tie_breaker,以达到取得最佳匹配查询子句的_score
#计算公式
#score=best_field.scoreboost+other_fieldsboost.score*tie_breaker
- best_fields :最佳字段 返回某一个字段匹配到最多关键字的文档
- most_fields:多数字段 多数字段匹配成功的得分之和,字段匹配越多,得分越高
- cross_fields :跨字段 指的是一个唯一标识,跨域了多个字段,比如人的标识是名字,一个建筑的标识是地址,姓名跨域散落在多个field中,比如first_name和last_name,一个地址也可以散落在多个字段中,比如country,province,city中
GET /area/_search
{"query": {"multi_match": {"query": "河南省郑州市","fields": ["province", "city"],"type": "cross_fields","operator": "and"}}
}
#operator使用and,是要返回两者同时匹配成功的结果。
10.match_phrase 查询
短语查询,full text search 是一个词组,意味着三个词的位置是连续且有顺序
GET /test03/user/_search
{"query": {"match_phrase": { "desc":"安门,北京"}}
}
GET /test03/user/_search
{"match_phrase": {"title": {"query": "full text search","slop":1}}
}
# slop 参数告诉match_phrase查询词条能够相隔多远时仍然将文档视为匹配。相隔多远的意思是,你需要移动一个词条多少次来让查询和文档匹配
11.phrase_prefix 查询
与词组中最后一个词条进行前缀匹配
类似于百度 中的搜索提示
GET /test03/user/_search
{"query": {"match_phrase_prefix": {"desc": {"query": "北京 哇哦"}}}
}
1、北京 就是去进行match,搜索对应的doc
2、哇哦,会作为前缀,去扫描整个倒排索引,找到所有哇哦开头的doc
3、然后找到所有doc中,即包含北京 ,又包含哇哦开头的字符的doc
4、根据你的slop去计算,看在slop范围内,能不能让北京 哇哦,正好跟doc中的北京和哇哦开头的单词的position相匹配
12.regexp 查询
{"query": {"regexp": {"title": "W[0-9].+" }}
}
13.高亮查询
GET /test03/user/_search
{"query": {"match": {"name": "王麻子"}},"highlight": {"fields": {"name":{}}}
}
GET /test03/user/_search
{"query": {"match": {"name": "王麻子"}},"highlight": {"pre_tags": "<p style='color:red'>","post_tags": "</p>", "fields": {"name":{}}}
}
14.分页查
GET /test03/user/_search
{"query": {"match": {"desc": "北京"}},"from": 0,"size": 2
}
15 返回指定字段
GET /test03/user/_search
{"_source":["name"],"query": {"match": {"desc": "北京"}},"from": 0,"size": 2
}
相关文章:

一起学WP7 XNA游戏开发(八. 让3d model动起来)
如何让3d model动起来,其实就是要给model的bone设置动作,这样整个model就会动起来了。一.获取Bones在fbx文件中可以看到所有bones的名称,这样就可以通过名称来获取到bones。turretBone tankModel.Bones["turret_geo"];…

【Python】解析Python中类的使用
目录结构: contents structure [-]类的基本使用专有方法继承单重继承多重继承砖石继承1.类的基本使用 下面是类使用的一个简单案例, class person:"person 类的描述信息"def __init__(self,name"",age0):self.name nameself.age a…

hive中array嵌套map以及行转列的使用
1. 数据源信息 {"student": {"name":"king","age":11,"sex":"M"},"sub_score":[{"subject":"语文","score":80},{"subject":"数学","score&qu…
SpringBoot 操作elasticsearch
SpringBoot 操作elasticsearch 版本环境 jdk1.8elasticsearch 7.6.1 maven <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>注意版本…

替换WCF默认序列化方式
创建类 : using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel.Description; using System.Xml; using System.Runtime.Serialization; namespace Kingge.Mini.Network { public class NetDataContra…

Linux下vi编辑器命令精华版
最近开始使用vi编辑器,用了几天,发现其实还是比较好用的。对自己常用的命令做个总结,以备实时查阅。一下内容是对网络多篇文章的总结。进入vi的命令:vi filename :打开或新建文件,并将光标置于第一行首 vi filename &…

测试用例评审关注点
测试用例评审关注点 1、用例设计是否清晰、合理、简洁; 2、用例是否高效对需求进行覆盖,是否覆盖测试需求上的所有功能点; 3、优先级是否合理; 4、用例是否有很好的可执行性(例如用例的“执行步骤”、“期待结果”是否…

命令行收集(DOS/Linux/nc/xscan/xsniffer)
#1 一: net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到…

偏前端 - vue-cli(axios请求数据==》token+按接口参数顺序(参数值拼接base64)- MD5)...
token按接口参数顺序(参数值拼接base64)-> MD5) 请教于“喵咪”,再此特别鸣谢!~ 特别强调:import qs from qs; 这个内部方法一定要用哦。参数签名base64md5都成功的情况华。接口还是爆500,就是和这个有关…
Docker 搭建elasticsearch 7.6.x集群
Docker 搭建elasticsearch 7.6.x集群 文章目录拉取镜像设置Elasticsearch挂载目录编写elasticsearch.yml配置文件node-1node-2node-3创建镜像验证是否搭建成功问题max virtual memory areas vm.max_map_count [65530] is too low, increase to at least参考拉取镜像 docker pu…

乐嘉性格色彩分析测试题
乐嘉<性格色彩>分析测试题 说明:最符合你的句子用红色作标记 1. 关于人生观,我的内心其实是: A 希望能够有尽量多的人生体验,所以会有非常多样化的想法。 B在小心合理的基础上,谨慎地确定自己的目标ÿ…

OAuth_1
OAuth2.0是一个应用之间彼此访问数据的开源授权协议。比如,一个游戏应用可以 访问Facebook的用户数据。用户访问web游戏应用,该游戏应用要求用户通过Facebook 登录。用户登录到Facebook,再重定向回游戏应用,游戏应用就可以访问用户…

ubuntu 使用阿里云 apt 源
以下内容来自 https://opsx.alibaba.com/mirror Ubuntu对应的“帮助”信息 修改方式:打开 /et/apt/sources.list将http://archive.ubuntu.com/替换为mirrors.aliyun.com即可 PS:网络上的信息,一定得注意时效性。以下内容,均为此时…

ecos 编译时无法找到 tclConfig.sh 和 tkConfig.sh
这是因为 tcl-devel tk-devel 一般系统中默认是不安装的,至少cent-os 5.5 和fedora 11是这样的,安装这两个包即可。 # yum install tcl-devel tk-devel 补记: ubuntu 10.04.2 上为了便于多个版本的tcl的存在,tcl被安装的位置不太一…

从消息处理角度看应用程序与windows的关系(图示)
转载于:https://blog.51cto.com/gzkhrh/338533

002:用Python设计第一个游戏
笔记 什么是BIF? 答:BIF 即 Built-in Functions,内置函数。为了方便快速编写脚本程序,Python 提供了非常丰富的内置函数,我们只需要直接调用即可,例如 print() 的功能是“打印到屏幕”,input() …

哑谜,回文和暴力之美
暴力搜索是一个有趣的东西。至少刘汝佳是这么认为的。编程之美的4.10节就是典型的暴力题。虽然作者将其难度定义为一颗星,但却不能因此认为这个类型的问题就是那么容易的,很多可能需要一些有创造力的想法。 不妨试试下面这几道题: Island of …

身份证敏感信息处理 图片添加蒙版
实现效果 需要的jar包 <!-- https://mvnrepository.com/artifact/com.jhlabs/filters --><dependency><groupId>com.jhlabs</groupId><artifactId>filters</artifactId><version>2.0.235-1</version></dependency> 调…

Linux bash管道符“|”使用介绍与例子
https://blog.csdn.net/wangqianyilynn/article/details/75576815转载于:https://www.cnblogs.com/dhName/p/10967718.html

PostgreSQL第一步:安装
PostgreSQL是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的BSD-风格许可证下发行。它在其他开放源代码数据库系统(比如MySQL和Firebird),和专有系统比如Oracle、Sybase、IBM的DB2和Microsof…

【Henu ACM Round#15 A】 A and B and Chess
【链接】 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 统计大写和小写的个数。 比较答案。输出即可。 【代码】 #include <bits/stdc.h> using namespace std;string s[10]; map<char,int> dic; int inc[300];int main() {for (int i 0;i < 8;i)cin…

[转载] static class 静态类(Java)
一般情况下是不可以用static修饰类的。如果一定要用static修饰类的话,通常static修饰的是匿名内部类。 在一个类中创建另外一个类,叫做成员内部类。这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态…
tomcat监控-psi-probe使用
什么是psi-probe 这是一款 Tomcat 管理和监控工具,前身是 Lambda Probe。由于 Lambda Probe 2006不再更新,所以 PSI Probe 算是对其的一个 Fork 版本并一直更新至今。 下载 下载地址:https://github.com/psi-probe/psi-probe 百度网盘地址…

配置文件app.config
无论对于客户端程序还是web应用程序,配置文件的作用不言而喻,现总结用法如下: 1. 创建配置节类 必须创建继承自ConfigurationSection的对象才能进行配置数据读写操作,ConfigurationSection提供了索引器用来获取和设置配置数据&…

windows远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可
远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可。 (也可以用 mstsc /admin) 可以在运行里使用mstsc /console /v:IP:远程端口即可强制登录; 如果直接在远程桌面连接端使用就直接输入/console /v:IP:远程端口. 如:mstsc /cons…

AppiumForWin安装
尝试安装Windows版本的Appium参考:http://www.cnblogs.com/fnng/p/4540731.html第一步:安装nodehttps://nodejs.org/en/安装成功后使用:node -v,进行验证第二步:安装Appium下面的方法失败:原因下载不成功&a…
prometheus--初见
什么是prometheus Prometheus(普罗米修斯)是一个开源系统监控和警报工具,最初是在SoundCloud建立的。自2012年成立以来,许多公司和组织都采用了普罗米修斯,该项目拥有一个非常活跃的开发者和用户社区。它现在是一个独立…

JavaScript时间日期格式化
/** 时间对象的格式化;*/ Date.prototype.format function(format) {/** eg:format"YYYY-MM-dd hh:mm:ss";*/var o {"M" :this.getMonth() 1, // month"d" :this.getDate(), // day"h" :this.getHours(), // hour"m" :th…

Hello World
作为所有编程语言的起始阶段,HELLO WORLD占据着无法改变的地位,所有中/英/法/德/美……版本的编程教材中,HELLO WORLD总是作为第一个TEST记录于书本之中,所有的编程第一步就在于此了!经典之中的经典!HELLO …

POJ 1144 Network (求割点)
题意: 给定一幅无向图, 求出图的割点。 割点模板:http://www.cnblogs.com/Jadon97/p/8328750.html 分析: 输入有点麻烦, 用stringsteam 会比较简单 #include<cstdio> #include<iostream> #include<queu…