elasticsearch之search template

一、search template简介

elasticsearch提供了search template功能,其会在实际执行查询之前,对search template进行预处理并将参数填充到template中。

elasticsearch主要提供了两个API来支持search template
_scripts/用于对search template的维护;
_search/template使用search template进行搜索;

二、测试数据准备

批量index三个文档

POST _bulk

{ "index" : { "_index" : "search_template_test", "_type" : "_doc", "_id" : "1" } }
{ "name":"zhang san",	"age":30,	"man":true,	"address":"Hebei LangFang"}
{ "index" : { "_index" : "search_template_test", "_type" : "_doc", "_id" : "2" } }
{ "name":"li si",	"age":20,	"man":true,	"address":"BeiJing HaiDian"}
{ "index" : { "_index" : "search_template_test", "_type" : "_doc", "_id" : "3" } }
{ "name":"liu hui",	"age":40,	"man":false,	"address":"NeiMengGu ChiFeng"}


查询查看三个索引的文档

GET search_template_test/_search
{
    "took":6,
    "timed_out":false,
    "_shards":{
        "total":5,
        "successful":5,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":3,
        "max_score":1,
        "hits":[
            {
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"2",
                "_score":1,
                "_source":{
                    "name":"li si",
                    "age":20,
                    "man":true,
                    "address":"BeiJing HaiDian"
                }
            },
            {
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"1",
                "_score":1,
                "_source":{
                    "name":"zhang san",
                    "age":30,
                    "man":true,
                    "address":"Hebei LangFang"
                }
            },
            {
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"3",
                "_score":1,
                "_source":{
                    "name":"liu hui",
                    "age":40,
                    "man":false,
                    "address":"NeiMengGu ChiFeng"
                }
            }
        ]
    }
}

三、维护search template

我们新建id为search_template_test.match_name的search template,其主要是查询match 字段name;

POST _scripts/search_template_test.match_name
{
    "script": {        
        "lang": "mustache",
        "source": {
            "query": {
                "match": {
                    "name": "{{name_val}}"
                }
            }
        }
    }
}

查看我们创建的search template

GET _scripts/search_template_test.match_name

{
    "_id":"search_template_test.match_name",
    "found":true,
    "script":{
        "lang":"mustache",
        "source":"{\"query\":{\"match\":{\"name\":\"{{name_val}}\"}}}",
        "options":{
            "content_type":"application/json; charset=UTF-8"
        }
    }
}

删除我们创建的search template

DELET _scripts/search_template_test.match_name
{
    "acknowledged":true
}

elasticsearch提供了API支持我们查看预处理最终形成的查询语句;

POST _render/template/search_template_test.match_name
{
    "params":{
        "name_val":"zhang li"
    }
}


{
    "template_output":{
        "query":{
            "match":{
                "name":"zhang li"
            }
        }
    }
}

四、使用search template

我们可以像下边这样使用search template

POST search_template_test/_search/template
{
    "id": "search_template_test.match_name", 
    "params": {
        "name_val":"zhang li"
    }
}



{
    "took":1,
    "timed_out":false,
    "_shards":{
        "total":5,
        "successful":5,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":2,
        "max_score":0.2876821,
        "hits":[
            {
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"2",
                "_score":0.2876821,
                "_source":{
                    "name":"li si",
                    "age":20,
                    "man":true,
                    "address":"BeiJing HaiDian"
                }
            },
            {
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"1",
                "_score":0.2876821,
                "_source":{
                    "name":"zhang san",
                    "age":30,
                    "man":true,
                    "address":"Hebei LangFang"
                }
            }
        ]
    }
}

执行search template也支持使用explain来调试查看elasticsearch的打分情况;

POST search_template_test/_search/template
{
    "id": "search_template_test.match_name", 
    "params": {
        "name_val":"zhang li"
    },
    "explain":true
}




{
    "took":3,
    "timed_out":false,
    "_shards":{
        "total":5,
        "successful":5,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":2,
        "max_score":0.2876821,
        "hits":[
            {
                "_shard":"[search_template_test][2]",
                "_node":"Sl6S4Kn2Rh-BdNgaM3ZwJg",
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"2",
                "_score":0.2876821,
                "_source":{
                    "name":"li si",
                    "age":20,
                    "man":true,
                    "address":"BeiJing HaiDian"
                },
                "_explanation":{
                    "value":0.2876821,
                    "description":"sum of:",
                    "details":[
                        {
                            "value":0.2876821,
                            "description":"weight(name:li in 0) [PerFieldSimilarity], result of:",
                            "details":[
                                ......
                            ]
                        }
                    ]
                }
            },
            {
                "_shard":"[search_template_test][3]",
                "_node":"Sl6S4Kn2Rh-BdNgaM3ZwJg",
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"1",
                "_score":0.2876821,
                "_source":{
                    "name":"zhang san",
                    "age":30,
                    "man":true,
                    "address":"Hebei LangFang"
                },
                "_explanation":{
                    "value":0.2876821,
                    "description":"sum of:",
                    "details":[
                        {
                            "value":0.2876821,
                            "description":"weight(name:zhang in 0) [PerFieldSimilarity], result of:",
                            "details":[
                                ......
                            ]
                        }
                    ]
                }
            }
        ]
    }
}

执行search template也支持使用profile来调试查看elasticsearch的查询执行情况;

POST search_template_test/_search/template
{
    "id": "search_template_test.match_name", 
    "params": {
        "name_val":"zhang li"
    },
    "profile":true
}



{
    "took":11,
    "timed_out":false,
    "_shards":{
        "total":5,
        "successful":5,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":2,
        "max_score":0.2876821,
        "hits":[

        ]
    },
    "profile":{
        "shards":[
            {
                "id":"[Sl6S4Kn2Rh-BdNgaM3ZwJg][search_template_test][0]",
                "searches":[
                    {
                        "query":[
                            {
                                "type":"BooleanQuery",
                                "description":"name:zhang name:li",
                                "time_in_nanos":308301,
                                "breakdown":{
                                    "score":0,
                                    "build_scorer_count":0,
                                    "match_count":0,
                                    "create_weight":308300,
                                    "next_doc":0,
                                    "match":0,
                                    "create_weight_count":1,
                                    "next_doc_count":0,
                                    "score_count":0,
                                    "build_scorer":0,
                                    "advance":0,
                                    "advance_count":0
                                },
                                "children":[
                                    {
                                        "type":"TermQuery",
                                        "description":"name:zhang",
                                        "time_in_nanos":32901,
                                        "breakdown":{
                                            "score":0,
                                            "build_scorer_count":0,
                                            "match_count":0,
                                            "create_weight":32900,
                                            "next_doc":0,
                                            "match":0,
                                            "create_weight_count":1,
                                            "next_doc_count":0,
                                            "score_count":0,
                                            "build_scorer":0,
                                            "advance":0,
                                            "advance_count":0
                                        }
                                    },
                                    {
                                        "type":"TermQuery",
                                        "description":"name:li",
                                        "time_in_nanos":15901,
                                        "breakdown":{
                                            "score":0,
                                            "build_scorer_count":0,
                                            "match_count":0,
                                            "create_weight":15900,
                                            "next_doc":0,
                                            "match":0,
                                            "create_weight_count":1,
                                            "next_doc_count":0,
                                            "score_count":0,
                                            "build_scorer":0,
                                            "advance":0,
                                            "advance_count":0
                                        }
                                    }
                                ]
                            }
                        ],
                        "rewrite_time":42700,
                        "collector":[
                            {
                                "name":"CancellableCollector",
                                "reason":"search_cancelled",
                                "time_in_nanos":700,
                                "children":[
                                    {
                                        "name":"SimpleTopScoreDocCollector",
                                        "reason":"search_top_hits",
                                        "time_in_nanos":200
                                    }
                                ]
                            }
                        ]
                    }
                ],
                "aggregations":[

                ]
            }
        ]
    }
}

五、使用search template处理复杂的查询

我们构建以下search template,其功能如下

可以通过name字段进行match,如果命中字段中的各个关键字相邻则有更高的权重打分,同时可以通过address字段进行模糊匹配,这三个查询只要命中一个即可;

man字段值必须符合输入的值;

POST _scripts/search_template_test.multi_search_template
{
    "script":{
        "lang":"mustache",
        "source":{
            "query":{
                "bool":{
                    "should":[
                        {
                            "match":{
                                "name":"{{name}}"
                            }
                        },
                        {
                            "match_phrase_prefix":{
                                "name":"{{name}}"
                            }
                        },
                        {
                            "query_string":{
                                "default_field":"address",
                                "query":"{{#join delimiter=' '}}address{{/join delimiter=' '}}"
                            }
                        }
                    ],
                    "filter":{
                        "term":{
                            "man":"{{man}}"
                        }
                    },
                    "minimum_should_match":1
                }
            }
        }
    }
}

通过以下参数命中前两条数据

POST search_template_test/_search/template
{
    "id":"search_template_test.multi_search_template",
    "params":{
        "name":"zhang sa",
        "address":[
            "*bei*",
            "*chi*"
        ],
        "man":true
    }
}


{
    "took":10,
    "timed_out":false,
    "_shards":{
        "total":5,
        "successful":5,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":2,
        "max_score":1.8630463,
        "hits":[
            {
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"1",
                "_score":1.8630463,
                "_source":{
                    "name":"zhang san",
                    "age":30,
                    "man":true,
                    "address":"Hebei LangFang"
                }
            },
            {
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"2",
                "_score":1,
                "_source":{
                    "name":"li si",
                    "age":20,
                    "man":true,
                    "address":"BeiJing HaiDian"
                }
            }
        ]
    }
}

我们将man字段设置为false,从而只匹配第三条记录;

POST search_template_test/_search/template
{
    "id":"search_template_test.multi_search_template",
    "params":{
        "name":"zhang sa",
        "address":[
            "*bei*",
            "*chi*"
        ],
        "man":false
    }
}

{
    "took":4,
    "timed_out":false,
    "_shards":{
        "total":5,
        "successful":5,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":1,
        "max_score":1,
        "hits":[
            {
                "_index":"search_template_test",
                "_type":"_doc",
                "_id":"3",
                "_score":1,
                "_source":{
                    "name":"liu hui",
                    "age":40,
                    "man":false,
                    "address":"NeiMengGu ChiFeng"
                }
            }
        ]
    }
}
本文转载于网络 如有侵权请联系删除

相关文章

  • ICMP报文详解之ping实现「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。ping是向网络主机发送ICMP回显请求(ECHO_REQUEST)分组,是TCP/IP协议的一部分。主要可以检查网络是否通畅或者网络连接速度快慢,从而判断网络是否正常。ping命令底层使用的是ICMP,ICMP报文封装在ip包里。它是一个对IP协议的补充协议,允许主机或路由器报告差错情况和异常状况。ICMP报文格式和各个字段的含义ICMP报文由首部和数据段组成。通过wireshark软件的使用加深对此的了解(差错报告、控制报文和请求应答报文)。回送请求的具体报文: 回送应答的具体报文:ICMP报头格式:ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。ICMP报头如下图所示。0123 01234567890123456789012345678901 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  • 张鑫旭说:去除inline-block元素间间距的N种方法

    戳蓝字“IMWeb前端社区”关注我们哦!关于作者张鑫旭,09年华中科技大学毕业,现上海,就职于阅文集团,专注web前端偏前领域,钓鱼爱好者。(左右滑动查看代码)1现象描述真正意义上的inline-block水平呈现的元素间,换行显示或空格分隔的情况下会有间距,很简单的个例子:间距就来了~~<input/><inputtype="submit"/>复制我们使用CSS更改非inline-block水平元素为inline-block水平,也会有该问题:.spacea{ display:inline-block; padding:.5em1em; background-color:#cad5eb; }复制<divclass="space"> <ahref="##">惆怅</a> <ahref="##">淡定</a> <ahref="##">热血</a> </div>复制这种表现

  • 微信小程序----折叠面板(MUI折叠面板)

    实现原理通过控制详情部分的显示隐藏,来实现折叠效果,同时切换右侧向下箭头。 效果图WXML<!--pages/accordion/accordion.wxml--> <viewclass="tui-accordion-content"> <viewclass="tui-menu-list{{isShowFrom1?'tui-shangjiantou':'tui-xiajiantou'}}"> <viewbindtap="showFrom"data-param="1"><text>表单</text></view> <viewclass="tui-accordion-from{{isShowFrom1?'':'tui-hide'}}"> <viewclass="tui-menu-listtui-clea

  • php+mysql开发中的经验与常识小结

    本文总结了php+mysql开发中的经验与常识。分享给大家供大家参考,具体如下:一、基础规范(1)尽量使用InnoDB存储引擎支持事务、行级锁、并发性能更好,CPU及内存缓存页优化得当,资源利用率更高(2)必须使用UTF8字符集无需转码,无乱码风险(3)数据表、数据字段必须加入中文注释N年后谁知道这个r1,r2,r3字段是干嘛的(4)尽量不要使用存储过程、视图、触发器、Event高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算尽量挪到上层(5)禁止存储大文件或者大照片不要让数据库做它不擅长的事情。大文件和照片存储在文件系统(使用上传服务),数据库里存URI二、命名规范(6)库名、表名、字段名:小写,下划线风格,不超过32个字符,必须见名知意,禁止拼音英文混用(7)表名简洁清晰,非唯一索引名idx_xxx,唯一索引名uniq_xxx三、表设计规范(8)单实例表数目必须小于500(9)单表列数目最好小于30(10

  • 简述 Tomcat

    1.1Tomcat简介1.1.1概述  Tomcat最初是由Sun的软件架构师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目O’Reilly都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为Tomcat。而O’Reilly出版的介绍Tomcat的书籍的封面也被设计成了一个公猫的形象。进而Tomcat的Logo兼吉祥物也被设计为一只公猫。   Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,在一台机器上配置好Apache服务器,可利用它响应HTML页面的访问请求。实际上Tomcat是Apache服务器的扩展,但运行时它是独立运行的,所以当你运行Tomcat时,它实际上作为一个与Apache独立的进程单独运行的。   Apache为HTML页面服务,而Tomcat实际上运行JS

  • 55 个提高你 CSS 开发效率的必备片段

    这篇文章会记录我们平时常用到的CSS片段,使用这些CSS可以帮助我们解决许多实际项目问题中遇到的,墙裂建议点赞收藏再看,方便日后查找?清除浮动浮动给我们的代码带来的麻烦,想必不需要多说,我们会用很多方式来避免这种麻烦,其中我觉得最方便也是兼容性最好的一种是,在同级目录下再创建一个<divstyle="clear:both;"></div>;不过这样会增加很多无用的代码。此时我们用:after这个伪元素来解决浮动的问题,如果当前层级有浮动元素,那么在其父级添加上clearfix类即可。//清除浮动 .clearfix:after{ content:"\00A0"; display:block; visibility:hidden; width:0; height:0; clear:both; font-size:0; line-height:0; overflow:hidden; } .clearfix{ zoom:1; }复制垂直水平居中在css的世界里水平居中比垂直居中来的简单一些,经过了多年的演化,依然没有好的方式来让

  • Prometheus监控学习笔记之Grafana用户权限分组

    Grafana有账户分权和管理功能,不过和一般的账户分权管理操作不一样。Grafana通过admin账户建立organization,在不通的org内配置数据源和用户,用户隶属于不通的org,只能看到该org内的数据展示。在org内在进行用户操作权限的配置即可。Grafana中通过设置不同的组织,以及将用户分配到不同组织,来做到多租户,类似门户的概念。Grafana默认是不允许非管理员用户创建新的组织的,这个可以通过修改配置文件以允许非管理员用户创建组织:下面演示下怎么新建组织,以及将组织和用户进行关联:点击上图中的“Neworganization”,我们可以看到“多组织常用于多租户部署”,如下所示输入组织名,点击“Create”,创建完组织后,可以为组织选择不同的用户:除此之外,也可以在全局用户界面,为用户添加不同的组织:经过上面的操作,就将组织和用户进行了划分,然后在每个组织内新建数据源、DashBoard,这样,不同的用户属于不同的组织,不同的组织用于独立的数据源以及DashBoard,就实现了多租户功能。由于数据源、DashBoard是和组织关联的,因此没法做到一个组织内不同的

  • HTTP 头部详细解释

    1.Accept:告诉WEB服务器自己接受什么介质类型,*/*表示任何类型,type/*表示该类型下的所有子类型,type/sub-type。2.Accept-Charset:浏览器申明自己接收的字符集Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)Accept-Language:浏览器申明自己接收的语言语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等。3.Accept-Ranges:WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。bytes:表示接受,none:表示不接受。4.Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。5.Authorization:当客户端接收到来自WEB服务器的WWW-Authenticate响应时,该头部来回应自己的身份验证信息给WEB服务器。6.Cache-Control:请求:no-cache(不要缓存的实体,要求现在从WEB服务器去取)max-a

  • 基于深度学习的计算机视觉应用之目标检测

    目标检测作为图像处理和计算机视觉领域中的经典课题,在交通监控、图像检索、人机交互等方面有着广泛的应用。它旨在一个静态图像(或动态视频)中检测出人们感兴趣的目标对象。传统的目标检测算法中特征提取和分类决策分开进行,对特征选取的要求就更加严格,在面对复杂场景的时候很难得到理想效果。自Hinton教授提出深度学习理论,越来越多的研究人员发现在目标检测领域应用深度学习,可以有效提高检测效果和性能,于是深度学习在实时视频的目标检测开始获得大规模的应用。时至今日,其检测效率和精度已经有了极大提高。传统检测算法传统的目标检测一般使用滑动窗口的框架,主要包括三个步骤:先利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域;然后提取候选区域相关的视觉特征——比如人脸检测常用的Harr-like特征,行人检测和普通目标检测常用的HOG(HistogramofOrientedGradient)、SIFT(ScaleInvariantFeatureTransform)特征等;最后利用分类器进行识别,比如常用的SVM模型。经典传统检测算法之DPM传统的目标检测中,多尺度形变部件模型DPM(DeformableP

  • JcJc人工智能错别字校对系统API(网站错别字检查)

    JcJc人工智能错别字校对系统API-网站错别字检查中文校对软件http://cuobiezi.net/zigen_jiaodui.htmlAppend:最新版错别字检测API地址https://github.com/textproofreading网站单页面错别字检查接口说明接口地址: http://api.CuoBieZi.net/spellcheck/url_check/json_phrase接口参数:字段一:”url”,填写需要检查页面的地址 字段二:”mode”,固定值,填写:”advanced”预留参数,固定值 字段三:”biz_type”,固定值,填写:”show”预留参数,固定值下面是一段python测试代码:url='http://api.CuoBieZi.net/spellcheck/url_check/json_phrase' url_content="http://news.sina.com.cn/c/2017-11-23/doc-ifypapmz4019608.shtml" payload={ "url&qu

  • 程序员面试必备之排序算法汇总(上)

    希望小小詹同学学习同时能便于他人~本文用Python实现了快速排序、插入排序、希尔排序、归并排序、堆排序、选择排序、冒泡排序共7种排序算法。一、快速排序1.介绍快速排序由C.A.R.Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。2.步骤及流程图(1)从数列中挑出一个元素,称“基准”(2)重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。(3)递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。流程图:(字很丑~后边还是不画了哈)3.python实现#encoding=utf-8 importrandom #快速排序 defqsort(list,low,high): iflow>=high: return fir

  • 命令mark

    foriin`sudo/usr/local/sbin/fping-g10.181.37.0/26-p10-r1|grepalive|awk'{print$1}'`;dohost$i;done|grep-vNXDO foriin`sudo/usr/local/sbin/fping-g10.181.37.0/26-p10-r1;done|grep-vNXDO foriin`sudo/usr/local/sbin/fping-g10.181.37.0/25-p10-r1|grepalive|awk'{print$1}'`;doecho-n"$i";host$i|grepbaidu.com;done|grep-vNXDO   foriin`catqianmo_bignat.txt`;doecho-n"$i";host$i|grepbaidu.com;done|grep-vNXDO foriin`catqianmo_bignat.txt`;docat2019-07-12|grep$i;echo-en"\n";done foriin`catqianmo_bignat.txt`;docat

  • cookie和session

      转载自: http://www.makaidong.com/博客园搜/14139.shtml     cookie机制。   cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决http协议无状态的缺陷所作的努力。   cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的http请求头上发送给服务器。    cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬

  • CTFshow WEB入门91

    /m代表匹配多行数据,可以利用%0a绕过 payload:?cmd=%0aphp

  • 洛谷 P1997 faebdc 的烦恼

    题目背景 鸟哥(faebdc)自从虐暴NOIP2013以来依然勤奋学习,每天上各种OJ刷题,各种比赛更是不在话下。但这天他遇到了一点小小的麻烦:在一届“Orz鸟哥杯”上,题目是在是太多了!鸟哥看得头晕眼花,他需要你的帮助。 题目描述 这场比赛共有nn道题,每道题都有一个难度值a_ia i ​ ,由于wangxz神犇已经提前帮助鸟哥将这些难度值升序排列,所以鸟哥并不想知道哪些题难度低或者高,他只想知道在某些题目a_l,a_{l+1},\ldots,a_ra l ​ ,a l+1 ​ ,…,a r ​ 中,出现最多的难度值出现的次数。 你的任务就是对于鸟哥的每一次询问(l,r)(l,r),告诉他在从a_la l ​ 到a_ra r ​ 这(r-l+1)(r−l+1)道题之中,出现最多的难度值出现的次数(询问共有qq次)。 如果你成功地帮助了鸟哥,鸟哥将会带你通过省选。 输入格式 每个测试点有且仅有一组测试数据。 第一行有两个整数,分别表示题目的数量nn和询问的次数qq。 第二行有nn个整数,第ii个整数a_ia i ​ 表示第ii道题的难度。 接下来qq行,每行两个整数l,r

  • 算法-----------数组------------只出现一次的数字

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗? 示例1: 输入:[2,2,1] 输出:1 示例2: 输入:[4,1,2,1,2] 输出:4 复制 我的解答: 第一版:耗时 125ms classSolution{ publicintsingleNumber(int[]nums){ if(nums==null){ return-1; } intlength=nums.length; if(length==1){ returnnums[0]; } intnumCount; intj,k; for(inti=0;i<length;){ j=k=i+1; numCount=0; for(;j<length;j++){ if(nums[i]==nums[j]){ numCount++; //交换 nums[j]=nums[k]; nums[k]=nums[i]; k++; } } if(numCount==0){ returnnum

  • shell变量详解

    shell变量详解   1shell变量基础shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义。所以若要进行数学运算,必须使用一些命令例如let、declare、expr、双括号等。shell变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell中可用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。变量名必须以字母或下划线字符开头。其余的字符可以是字母、数字(0~9)或下划线字符。任何其他的字符都标志着变量名的终止。名字是大小写敏感的。给变量赋值时,等号周围不能有任何空白符。为了给变量赋空值,可以在等号后跟一个换行符。用set命令可以查看所有的变量,unsetvar命令可以清除变量var,var相当于没有定义过。readonlyvar可以把var变为只读变量,定义之后不能对var进行任何更改。对shell变量的引用方式很多,用这些方式可以方便的获取shell变量的值,变量值的长度,变量的一个字串,变量被部分替换后的值等等。shell变

  • 用唯一分解定理求m/n

    用唯一分解定理求m/n,保证m能够被n整除; 这其中用到了素数筛以及快速幂 #include<bits/stdc++.h> usingnamespacestd; constintmaxn=1e4+5; boolvis[maxn]; intprime[maxn],cnt=0,e[maxn]; voidgetprime(){ for(inti=2;i<maxn;++i){ if(!vis[i])prime[++cnt]=i; for(intj=i*2;j<maxn;j+=i) vis[j]=1; } } voidsolve(intx,intd){ for(inti=1;i<=cnt;++i){ while(x>1&&x%prime[i]==0){ x=x/prime[i]; e[i]+=d; } if(x<=1)break; } } intqpow(intx,intcnt){ intans=1; while(cnt){ if(cnt&1)ans*=x; x=x*x; cnt>>=1; } returnans;

  • $(function) ready onload 等区别

      新手接触javascript、jquery的时候不可避免的要接触题目所标识的相关内容,反复看过几次一到用的时候总是不踏实,写文以记之。      符号“$”是jquery对象(个人这样理解,拥有函数的用法)。接着知道下面的一个等式,功能性能上是完全一致的。     $(function(){/*dosomething*/})=$(document).ready(function(){/*dosomething*/})=$().ready(function(){/*dosomething*/});      上面是jquery中的东西,接着说下原生javascript中的,有window.onload和<bodyonload="">这两个,是存在一定区别的,使用匿名函数以及非匿名函数等会有不同,我暂时用不到所以没有做试验,网上是众说纷纭,不一致。但是onload与jquery中的ready是不同的,这里面说下:   一个是次数不同,$().ready()在一个一个html中可以使用多次,onload只能使用一次或者说有效绑定只能是唯一的一个。   另一个是执行时机的不同,

  • 词法、句法、短语、从句和句子、主谓一致、特殊句式

    词类(partsofspeech) 英语的词通常分为十大类: 1)名词(noun,缩写为n.)是人和事物的名称,如pen(钢笔),English(英语),life(生活)。 2)代词(pronoun,缩写为pron.)是用来代替名词的词,如we(我们),his(他的),all(全部)。 3)形容词(adjective,缩写为adj.)用来修饰名词,如great(伟大的),honest(诚实的),difficult(困难的)。 4)数词(numeral,缩写为num.)是表示"多少"和"第几"的词,如four(四),eighteen(十八),first(第一),eighth(十八),hundred(一百)。 5)动词(verb,缩写为v)表示动作和状态,如write(写),walk(行走),think(想)。 6)副词(adverb,缩写为。adv.)是修饰动词、形容词和副词的词,如quickly(快),often(经常),very(很)。 7)冠词(article,缩写为art.)说明名词所指的人或物的词,如a,an(一个),the(这,那)。 8)介词(preposition,缩写为

  • DRG,医改分水岭!

    2020-11-04 (2021年政府推出2.0版DRG。增加MCC和CC,各自政府的医保支付中增加了人性化的支付倍率的处理) 假设某疾病病组支付标准10000元,患者自付自费比例40%,分三种情况,分析费用分担情况。具体情况如下表:      医院盈收=支付标准-病人一次住院诊疗成本 DRG付费使得多方都会发生相应变化: 一、医院作为医疗服务提供方,院内管理层更关注运营成本,同时要求临床诊疗行为规范化; 二、医保部门作为医疗服务的购买方,其将更关注医保欺诈; 三、卫生管理部门将更关注医疗质量与安全。   卫生管理部门发布的三级公立医院绩效考核文件,我们发现,其对公立医院的要求与DRG对医院的要求是完全一致的,都是指导医院在发展方式上由规模扩张型转向质量效益型,在管理模式上由粗放的行政化管理转向全方位的绩效管理,并促进收入分配更科学公平,实现效率提升和质量提升。此外,公立医院绩效考核将DRG考核指标融入其考核体系中,例如低风险死亡指标、CMI指标。       DRG下的医院管理 在DRG付费方式下医疗服务的提

相关推荐

推荐阅读