本文首发于公众号:Hunter后端
原文链接:es笔记二之基础查询
这一篇笔记介绍 es 的基础查询。
基础查询包括很多,比如排序,类似数据库 limit 的操作,like 操作,与或非等,对于这些操作,我会在介绍他们的用法之后加上对应的数据库 sql 便于理解。
注意: 下面的操作都在 kibana 中实现
以下是本篇文章目录:
如果是想要查看 es 中都有哪些 index,可以如下操作:
GET /_cat/indices
然后可以看到在右侧会输出所有的 index,其中就包含我们上一篇笔记导入的 bank 数据,接下来我们使用 bank 作为查询示例。
如果我们想查看 bank 中的全部数据,可以如下操作,但是不指定 size 参数的话默认最多只返回 10 条数据:
GET /bank/_search
出来的结果大致如下:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1000,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "bank",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"account_number" : 1,
"balance" : 39225,
"firstname" : "Amber",
"lastname" : "Duke",
"age" : 32,
"gender" : "M",
"address" : "880 Holmes Lane",
"employer" : "Pyrami",
"email" : "amberduke@pyrami.com",
"city" : "Brogan",
"state" : "IL"
}
},
...
]
}
}
took 表示查询花费了多少时间,以毫秒为单位
time_out 表示查询是否超时
_shards 表示分片的查询信息,表示有多少个分片被查询,失败,和跳过
然后查询的结果都被放在 hits 字段下,在 hits 信息中,
hits.total 表示查询到了多少匹配的数据
hits.hits 是一个数组,包含了返回信息的全部内容,每个元素都是单个查询的返回结果。
在每个元素中,_index,_type,_id,_score 表示单条数据的所属的数据库信息
_source 其中包含了获取信息的字段信息,如果没有指定字段,则返回该数据所有字段。
查询出的数据如果想要以某种顺序返回,可以使用 sort 来排序
比如说根据 balance 倒序排序
GET /bank/_search
{
"sort": [
{"balance": {"order": "desc"}}
]
}
这条数据对应于 sql 中的语法就是:
order by balance desc
sort 后接一个数组,表示可以根据多个字段进行正序,逆序的排序方式。
在前面的搜索中可以看出,如果不限定返回条数,系统会默认返回 10 条数据,在 es 中有类似于 MySQL 的 limit 和 offset 的操作,那就是 size 和 from。
from 表示从第 n 个开始获取数据,从 0 开始取值
size 表示获取数据量的大小。
比如说从第0条数据开始,获取5条数据,可以如下操作:
GET /bank/_search
{
"sort": [
{"balance": {"order": "asc"}}
],
"from": 0,
"size": 5
}
对应于 sql 语法是:
limit 5 offset 0;
关于字段搜索,有几个关键字,match,match_phrase等。
match 表示模糊搜索,会将搜索的内容先进行分词操作,然后搜索,比如我们搜索 bank 这个 index 中 address 字段中包含 "cove" 或者 包含 "lane" 的的数据,我们可以如下操作:
GET /bank/_search
{
"query": {
"match": {"address": "Cove Lane"}
}
}
这条语句类似于 sql 中的:
where address like "%cove%" or address like "%lane%"
只要 address 的字符包含 cove 或者 lane 之一即可。
而如果我们想要实现 cove lane
作为一个整体进行查询,我们可以使用 match_phrase 来实现:
GET /bank/_search
{
"query": {
"match_phrase": {"address": "Cove Lane"}
}
}
这个操作类似于 sql 中的:
where address like "%mill lane%"
上面这些 match 操作都是大小写不敏感的。
关于 match 和 match_phrase 的筛选方式这里只做一个示例,在后面我会单开一篇笔记详细介绍其用法,针对 text 类型和 keyword 类型的字段。
多条件,就是与或非连接操作,类似于 sql 中的 and、or、not,对应在 es 中就是 must,should,must_not
在 es 中,每个连接操作都是一个数组,用于连接多个条件操作,示例如下:
GET /bank/_search
{
"query": {
"bool": {
"should": [
{"match": {"age": 24}},
{"match": {"age": 25}}
],
"must_not": [
{"match": {"gender": "M"}}
]
}
}
}
可以看到,与或非的操作我们是在 query 的 bool 这个 key 的下一级,这个查询对应的 sql 的查询是:
where (age = 24 or age = 25) and gender != "M";
在 es 中,大小于的过滤操作是复杂一点的,也在 bool 这个 key 下一级,用到 filter 和 range 关键字
大小于的关键字和 Django 里的是一样的用到 gt, gte, lt, lte 这几个
比如我们要搜索 age 的范围在 21 到 23 之间的包括 21 和 23 的数据
GET /bank/_search
{
"query": {
"bool":{
"filter": {
"range": {
"age": {
"gte": 21,
"lte": 22
}
}
}
}
}
}
上面的操作可以和与或非的操作进行并列,如果是直接搜索大小于的操作,可以直接如下操作:
GET /bank/_search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
}
}
如果想获取更多后端相关文章,可扫码关注阅读:
用手势导航可以完成GTAV,那么这一思想也能带入到别的游戏中。因此,我们的第一选择是打格斗游戏,并且该类别中最好的游戏之一是《铁拳》(SFTK)。主要概念很简单,无论人类玩家会采取什么行动(例如拳打),游戏中的玩家都会复制相同的动作。因此,为了实现这个想法,我们想出了两种方法。首先,一种是较为复杂的方法:把我们的200+图像做不同的动作(如冲压,跳跃)等,然后用它来训练模型,以不同的姿势或者动作之间进行分类,并模拟它在游戏。但是这种方法存在一些问题。显而易见,我们必须给自己拍很多张照片,每个类别中要有200张以上。这将非常忙碌,并且为了概括起见,我们还需要不同大小,背景和光照条件不同的人的图像。这可能会花费很多时间。第二种方法是简单地使用我们以前在VirtualSwitchandGestureGaming中的项目中的想法,为了概念验证,我们决定采用第二种方法。概念其工作背后的主要概念非常容易,只是有一个虚拟开关,只要按下该开关,就可以模拟游戏中相应的动作(踢)。步骤跟踪脸部。将边界框wrt移到bbox面。使用特定区域作为专用于特定操作的虚拟交换机。Bbox(边界框)是用于指代感兴趣区域
在Go的runtime里有一些创建了就没法回收的东西。之前在这篇里讲过allgs没法回收的问题。除了allgs之外,当前Go创建的线程也是没法退出的,比如这个来自xiaorui.cc的例子,我简单做了个修改,能从网页看到线程:packagemain /* #include<stdio.h> #include<stdlib.h> #include<unistd.h> voidoutput(char*str){ usleep(1000000); printf("%s\n",str); } */ import"C" import"unsafe" import"net/http" import_"net/http/pprof" funcinit(){ gohttp.ListenAndServe(":9999",nil) } funcmain(){ fori:=0;i<1000;i++{ gofunc(){ str:=&
解决jupyternotebookmatplotlib绘图中文乱码问题最近想给绘制出来的图加入中文标题,但是出现方形乱码。查了番资料,最后找到了解决办法。0.效果如下1.首先查找matplotlib字体配置文件的目录。importmatplotlibmatplotlib.matplotlib_fname()复制matplotlibrc:配置文件 fonts:字体文件夹2.下载SimHei字体需要的朋友可以到我的公众号【拇指笔记】,后台回复:SimHei,自取。3.将下载的字体放到fonts\ttf文件夹下4.修改matplotlibrc配置文件编辑器打开matplotlibrc文件将这行去掉注释(我的截图是已经去掉的)将这行也去掉注释,True改成False将这行注释也去掉,冒号后加SimHei5.删除缓存6.重启jupyternotebook即可最后成功显示中文
第1章:面向对象的四个好处:1.1可维护,可扩展,可复用,灵活性好;1.2封装,继承,多态把程序的耦合度降低;1.3面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。第2章:策略者模式2.1策略者模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作(为了计算商品的价格),只是实现不同,它可以相同的方式调用所有的算法(cs.GetResult(doublemoney)),减少了各种算法类与使用算法类之间的耦合。2.2策略者模式的优点:简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。2.3当不同的行为堆砌在一个类中时候,就很难避免使用条件语句来选择合适的行为。将这些行为封装在一个个独立的Strategy类中,可以在使用这些行为的类中,消除条件语句。2.4策略者模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。2.5在基本的策略模式中,选择所用具体实现的职
python模块之sys和subprocess以及编写简单的主机扫描脚本1.sys模块sys.exit(n) 作用:执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常)sys.path 作用:获取指定模块搜索路径的字符串集合 sys.platform:获取当前系统平台 sys.argv 在外部向程序内部传递参数2.subprocess模块(sys模块的升级版,常用)subprocess.run() 作用:运行命令,返回命令执行的结果(python3.5以后的版本才会有这个命令) subprocess.call() 作用:执行命令,返回命令的状态,0或者非0,0表示执行成功 subprocess.getstatusoutput() 作用:接收字符串形式的命令,返回元组形式,第一个元素是执行状态,第二个是命令结果 subprocess.check_output() 作用:执行命令,并且返回二进制结果3.简单的
旋转数组将包含n个元素的数组向右旋转k步。例如,如果n=7,k=3,给定数组 [1,2,3,4,5,6,7],向右旋转后的结果为 [5,6,7,1,2,3,4]。注意: 尽可能找到更多的解决方案,这里最少有三种不同的方法解决这个问题。提示: 要求空间复杂度为O(1)-1)第一获取最高位的数字,第二把其他位上的数字都抬高一位,第三把最初获得最高位的数字赋值到最低位置上。我觉得这个算法没啥问题啊。。。???可是过不了最后一个测试用例。。。(超出时间限制),好吧。。。希望有大神解惑代码如下:classSolution{ funcrotate(_nums:inout[Int],_k:Int){ varterns=k%nums.count ifnums.isEmpty||terns==0{ return } whileterns>0{ vartemp=0 temp=nums.last! foriin(0..<(nums.count-1)).reversed(){ nums[i+1]=nums[i] } nums[0]=temp terns-=1 } } }复制-2)取余数,比如长度
1.接口描述接口请求域名:eiam.tencentcloudapi.com。 通过用户名或用户id冻结用户 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。本文档展示的是V1签名的参数说明,腾讯云建议您使用安全系数更高的V3签名算法,使用签名方法v3时,公共参数需要统一放到HTTPHeader请求头部中,详情。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:ModifyUserInfo。 Version 是 String 公共参数,本接口取值:2021-04-20。 Region 否 String 公共参数,本接口不需要传递此参数。 UserName 否 String 用户名,长度限制:32个字符。Username和UserId需选择一个作为搜索条件;如两个条件同时使用则默认使
MySQL高可用集群MHA方案 爱奇艺在用的数据库高可用方案 MHA是目前比较成熟及流行的MySQL高可用解决方案,很多互联网公司正是直接使用或者基于MHA的架构进行改造实现MySQL的高可用。 MHA能在30秒内对故障进行转移,并最大程度的保障数据的一致性。MHA由两个模块组成:Manager和Node。 什么是MHA MHA(MasterHighAvailability)目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。 MHA作用是保证MySQL主从复制集群中的master高可用性,也就保证整个数据库集群业务不被故障影响。 master故障时,MHA会在30s内实现故障自动检测+故障转移 选择一个最优的slave接替为新的master,并且保证new_master和其他slave继续保持数据一致性 高可用性HA、highavailability 指的是一个经过设计的系统,能保证减少架构故障时的停工时间,保证业务程序的高度可用性 超哥也在各种运维业务场景下,接触过HA软件 无论是web、数据库、还
内容摘录自他的一份手稿IntroductiontoschoolAlgebra. Thereisnodenyingthatbeginningstudentsoughttoacquiresomefacilitywithdecomposingnumbersintoproducts.Itisalsoimportantthattheycaneortlesslyfactorasimplequadraticpolynomial$x^2+2x-35$as$(x+7)(x-5)$.Butitsometimeshappensthatifalittlebitofsomethingisgood,alotofitcanactuallybebadforyou.Thisseemstobethecasehere,whentheteachingofasmallskillgetsblownuptobeamajortopic,withtheconsequencethatothertopicsthataremorecentralandmoresubstantial(suchaslearningaboutthegraphs
1、屏幕分辨率 <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:resizeable="true" android:anyDensity="true"/>复制 DisplayMetricsmetric=newDisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); intwidth=metric.widthPixels;//屏幕宽度(像素) intheight=metric.heightPixels;//屏幕高度(像素) floatdensity=metric.density;//屏幕密度(0.75/1.0/1.5) intdensityDpi=metric.densityDpi;//屏幕密度DPI(120/160/240)复制 在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。比如说,一部24
第1-3章 1、信息化从“小”到“大”的5个层次 口诀:产企业国社 知识点:产品信息化、企业信息化、产业信息化、国民经济信息化、社会生活信息化 2、信息系统生命周期的四个阶段 口诀:离开云霄 解释:离开云霄就没命了,所以是生命周期 知识点:立(离)项、(开)发、运(云)维、消(霄)亡 3、开发阶段的五个阶段 口诀:花粉色实验 解释:用花粉的颜色来做实验,做实验就是一个开发的过程 知识点:总体规划(花)、系统分(粉)析、系统设(色)计、系统(实)验、系统(验)收 4、常用的开发方法 口诀:结缘对象 解释:有缘的人才能成为对象 知识点:(结)构化方法、原(缘)型法、面向(对象)法 5、软件维护的类型 口诀:更是鱼丸 解释:更像是鱼丸 知识点:(更)正性维护、适(是)应性维护、预(鱼)防性维护、完(丸)善性维护 6、对象的三个基本要素 口诀:标形状 解释:标上对象的形状 知识点:对象(标)识、对象行(形)为、对象(状)态 7、数据仓库的概念 口诀:主机win10 解释:数据仓库的主机系统是win10 知识点:数据仓库是一个面向(主)题的、集(机)成的、相对稳(win)定的、反应
packagecom.bsc.algorithm.sort.heap; importcom.bsc.algorithm.sort.inf.AbstractSort; /** *堆排序 *@authorbsc * *一个长度为n的数组,将它看成一个完全二叉树的顺序存储结构 *当n>=2时,第i个元素代表非叶子结点,至少有一个孩子,i满足0<=i<=(n-2)/2 *第i个元素的左孩子是:2i+1(一定存在),右孩子是:2i+2(当i=(n-2)/2时可能不存在) */ publicclassHeapSort<TextendsComparable<T>>extendsAbstractSort<T>{ /** *把父结点parent以下的子结点中的最大值移到父结点上(parent以下的所有非叶子子结点要大于自己的孩子) *父结点原值找到子结点合适位置替换 *@paramdata *@paramparentIndex *@paramlength *@paramcr */ privatevoidheapAdjust(T[]data,int
1、添加dubbo服务相关jar包,如jmeter-plugins-dubbo-2.7.3-jar-with-dependencies.jar或单个相关依赖jar包。jar包下载地址:https://gitee.com/ningyu/dist-jmeter-plugins-for-apache-dubbo/tree/master/2.7.3 (根据不同的dubbo版本下载不同的依赖包) 如图: 注意:依赖包中的dubbo支持版本一定要与服务器的dubbo版本一致 2、打开jmeter,添加dubbosimple 3、设置dubbosimple的设置 参考链接:https://www.cnblogs.com/zz-yy/p/11239968.html https://jingyan.baidu.com/article/75ab0bcb23f3989
目录1.概要2.目录结构(工程结构)推荐2.1.总的原则2.2.实例2.3.共享模块-SharedModule3.高级应用-angular库、工作空间(workspace)3.1.目录结构示意4.总结 环境: AngularCLI:11.0.6 Angular:11.0.7 Node:12.18.3 npm:6.14.6 IDE:VisualStudioCode 1.概要 实际的Angular项目,肯定不是一个简单的HelloWorld程序,会包含很多的功能,很多的文件。那么如何更好的组织这些文件呢?官方给了一个原则,可以供参考: https://angular.io/guide/styleguide#application-structure-and-ngmodules。 下面,我们来通过一个例子具体解释一下。 2.目录结构(工程结构)推荐 2.1.总的原则 基于AngularCLI创建模块(module),组件(component)等等的内容; 源代码都放到src文件夹下; 应用的根目录创建一个NgModule,并命名为app.module.ts(例如/src/app,这
说明 PHP5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的)。对于PHP5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHPAPC加速的方法。 PHP开启opcache方法 1、打开php.ini文件 2、找到:[opcache],设置为: [opcache] ;dll地址 zend_extension=php_opcache.dll ;开关打开 opcache.enable=1 ;开启CLI opcache.enable_cli=1 ;可用内存,酌情而定,单位为:Mb opcache.memory_consumption=528 ;ZendOptimizer+暂存池中字符串的占内存总量.(单位:MB) opcache.interned_strings_buffer=8 ;对多缓存文件限制,命中率不到100%的话,可以试着提高这个值 opcache.max_accelerated_files=10000 ;Opcache会在一定时间内去检查文件的修改时间,这里设置检查的时间周期,默认为2,定位为秒 o
干编程干到一定阶段也许会陷入种种困境,往往最根本的原因是自己的思维受到了自我的禁锢 太沉浸于自我和编程的世界,而以下这篇文章则从更加务实的角度告诉了我们一个程序员该如何编程。 “ 曾经,我试过接到一些需求。一眼带过后,脑袋马上随着高昂的斗志沉溺在代码的世界中,马不停蹄地敲着键盘直到最后测试的完成。我从思绪中恢复过来,乍一看自己写的功能,和需求差了十万八千里,我TM都在干嘛? 除此之外,我还见过类似的很好笑的事情。有一个程序员,经理提了需求,然后他在那里折腾了一天。结果不但没做出来,而且和实际需求都是完全搭不上调。经过询问发现,他不知道经理说了什么,也不知道自己到底在做什么...... ” 目录:[ - ] 我在做什么 大局为重 性能永远不是优先考虑的问题 名字长一点好 自说明代码很重要,但注释同样重要 适当抽象 一致性 将错就错 适当休息 至少把代码完整运行一次 编程不是艺术 甘于平凡 承认错误 有原则,有决心 我在做什么 原文链接: http://my.oschina.net/u/867608/blog/138002
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN。因为CSDN也支持MarkDown语法了,牛逼啊! 【工匠若水http://blog.csdn.net/yanbober转载烦请注明出处,尊重分享成果】 最近相对来说比较闲,加上养病,所以没事干就撸些自己之前的知识点为博客,方便自己也方便别人。 1背景 之所以选择这个知识点来分析有以下几个原因: 逛GitHub时发现关注的isuss中有人不停的在讨论Android中的Looper,Handler,Message有什么关系。 其实这个知识点对于Android初学者来说很常用,但是初学者可能前期一直处于会用不知其原理的阶段。 这个知识点也是Android面试中一个高频问题。 基于以上几点也得拿出来分析分析,该篇博客从实例到源码完全进行了剖析(包含Handler、Message、MessageQueue、Looper、HandlerThread等源码),不同于网上很多只是分析局部的博客。 你可能在刚开始接触Android开发时就会知道如下问题: Android的UI时线程不安全的,如果在线程中更新UI会出现
调用: $(document).ready(function(){ sAlert("公告","内容"); });复制 方法 functionsAlert(strTitle,strContent){ varmsgw,msgh,bordercolor; msgw=400;//提示窗口的宽度 msgh=100;//提示窗口的高度 titleheight=25//提示窗口标题高度 bordercolor="#336699";//提示窗口的边框颜色 titlecolor="#99CCFF";//提示窗口的标题颜色 varsWidth,sHeight; sWidth=document.body.offsetWidth; sHeight=screen.height; varbgObj=document.createElement("div"); bgObj.setAttribute('id','bgDiv'); bgObj.style.position="absolute"; bgObj.style.top="0"; bgObj.style.background="#777";
什么是webpack? 本质上,webpack是一个现代JavaScript应用程序的静态模块打包器(modulebundler)。当webpack处理应用程序时,它会递归地构建一个依赖关系图(dependencygraph),其中包含应用程序需要的每 个模块,然后将所有这些模块打包成一个或多个bundle。 webpack就像一条生产线,要经过一系列处理流程后才能将源文件转换成输出结果。 这条生产线上的每个处理流程的职责都是单一的,多个流程之间有存在依赖关系,只有完成当前处理后才能交给下一个流程去处理。 插件就像是一个插入到生产线中的一个功能,在特定的时机对生产线上的资源做处理。 webpack通过Tapable来组织这条复杂的生产线。 webpack在运行过程中会广播事件,插件只需要监听它所关心的事件,就能加入到这条生产线中,去改变生产线的运作。 webpack的事件流机制保证了插件的有序性,使得整个系统扩展性很好。 --《深入浅出webpack》吴浩麟
匈牙利命名法变量的基本格式:作用域_数据类型的变量名;作用域:全局静态的作用域:s_开头表示;全局作用:g_开头表示常态变量:c_开头表示类作用域:m_开头的方法作用域:没有开头 例子:staticints_nhaha;externintg_nHaha;constintc_nHahah;publicintm_nHAHA;intnNumber;intm_nNumber;//类和结构体里面的; 数据类型:int:n;float:f;double:d;long:l;short:s;unSignedint(uint):un;unSignedlong(ulong):ul;unSignedshort(ushort):us;char:b或者C开头uchar:ub或者uc;byte:ub;sbyte:b; string:str;bool:is对象:p; struct:suenum:em; 说明:如果数据类型是数组结构就把它当作对象eg:publicintm_nIndex;publicfloatm_fIndex;publicobjectm_pObj; publicbyte[]m_pBuffer; 成员函