安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Elasticsearch高级检索

10月10日 不回头投稿
  检索原理
  每一个Index都被分成两个区,一个是索引区,一个是元数据区(文档区)。
  当一个Document存储进入Index时,存放的位置是Index的文档区,ES会给该Document分配一个唯一的编号(id),然后ES对该Document进行解析,分析每一个字段的类型和数据,再将每一个字段的数据,属于哪一个Document,出现了几次等信息记录下来存入索引区。
  当对该Index进行检索时,ES首先会在索引区匹配关键词,如果匹配不到,则直接返回空信息。如果匹配到了,通过附加信息去文档区检索对应的Document进行返回,这个过程叫做Document的击中。检索方式
  ES官方提供了两中检索方式:QueryString:通过URL拼接参数进行检索QueryDSL:通过DSL携带参数进行检索
  DSL,英文全称DomainSpecifiedLanguage,中文译为特定领域语言。是基于传递JSON格式的信息作为请求体(RequestBody)与ES交互进行检索的一种方式。官方更推荐使用DSL进行检索,这种方式更直观,更简洁。
  QueryString的方式在简单检索应用中确实很方便,但是在复杂检索中会使得URL过于冗长和复杂,并且浏览器地址栏对于URL的字符数规定并不是无限的,所以QueryString在复杂检索中是存在局限性的,官方不推荐使用。
  例如,对postilhubuser下的所有Document进行分页查询,当前条号为0,每页容量为5,并对查询出来的每一个Document按照age降序排序。GETpostilhubusersearch?qfrom0size5sortage:desc复制代码QueryDSL入门1。查询返回信息分析
  每一次ES查询返回的信息中不仅仅只有我们需要的信息,还有很多附带的信息
  took:ES响应的毫秒值timeout:Kibana在请求ES时是否超时shards:集群相关total:分片总数successful:分片正常数hits:本次查询击中的结果对象total:本次查询结果条目数maxscore:最大得分(系统根据搜索条件动态计算,相关度排序)hits:符合条件的每一个Document对象2。查询所有DocumentGETpostilhubusersearch{query:{matchall:{}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询所有Document。
  注意:matchall虽然是查询全部,但是默认只返回10个Document的信息,如果想要指定返回的Document数量,需要设置size:GETpostilhubusersearch{query:{matchall:{}},size:5}复制代码3。查询所有Document并排序GETpostilhubusersearch{query:{matchall:{}},sort:〔{age:{order:desc}},{username:{order:asc}}〕}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询所有Document,先按照age进行降序排序,再按照username进行升序排序。
  注意:支持多字段排序,如果两个Document的第一个字段相同,则会按照第二个字段进行排序,以此类推。排序的字段类型必须能排序,比如:keyword,integer,date,不能是text。当检索的文档进行了排序,则ES不会计算任何一个文档的得分。4。分页查询DocumentGETpostilhubusersearch{query:{matchall:{}},from:0,size:2}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,从第0号Document开始,每页存放两个Document,进行分页查询。5。指定Document返回字段查询
  如果不使用source指定返回的字段,那么ES默认所有的Document查询都是全字段返回。GETpostilhubusersearch{query:{matchall:{}},source:username}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询全部Document,只返回username字段信息。
  如果需要返回Document中的多个字段信息:GETpostilhubusersearch{query:{matchall:{}},source:〔username,age,birth〕}复制代码6。分词器简述
  在学习关键词检索之前,需要了解分词器。
  在ES的常见字段类型中,例如keyword,text,integer,boolean,date,ip等,只有text类型是分词的。
  ES中使用的默认分词器是StandardAnalyzer标准分词器,该分词器对于英文是单词分词,对于中文是单字分词。
  如果检索的目标字段是text类型,那么关键词如果是多个汉字多个单词,即使被字段数据包含,也是检索不到的;只有关键词为单个汉字单个单词,并且被字段数据包含才会被检索到。
  如果检索的目标字段不是text类型,则该字段不会被分词,例如keyword类型。这时无论关键词是多个汉字多个单词还是单个汉字单个单词必须完全匹配字段数据,才可以被检索出来。
  例如:当前有一个Mapping里设置了一个keyword类型的字段username,一个text类型的字段introduction。其中一个Document中的username为张三,introduction为我是一名学生。第一次检索,检索对象为username字段,提供的关键词为张,未检索出结果。第二次检索,检索对象为username字段,提供的关键词为三,未检索出结果。第三次检索,检索对象为username字段,提供的关键词为张三,检索出该Document。第四次检索,检索对象为introduction字段,提供的关键词为我是一名学生,未检索出结果。第五次检索,检索对象为introduction字段,提供的关键词为学生,未检索出结果。第六次检索,检索对象为introduction字段,提供的关键词为我,检索出该Document。第七次检索,检索对象为introduction字段,提供的关键词为学,检索出该Document。
  因为ES默认分词器对于中文是单字分词,所以给检索带来极大不变,之后需要对标准分词器进行替换。7。关键词查询DocumentGETpostilhubusersearch{query:{term:{username:{value:john}}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,进行关键词查询Document,查询目标字段为username,提供的关键词为john。8。范围查询DocumentGETpostilhubusersearch{query:{range:{age:{gte:10,lte:20}}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询age字段大于等于10,小于等于20的所有Document。
  注意:还可以使用gt,lt等接口。9。前缀查询DocumentGETpostilhubusersearch{query:{prefix:{address:{value:北}}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询address字段数据中有以北作为前缀的所有Document。(例如:北京,北平,北方大区都会被检索到)10。通配符查询Document?:只能匹配1个任意字符。:匹配0到任意多个字符。GETpostilhubusersearch{query:{wildcard:{address:{value:北?}}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询address字段数据必须是以北开头,字符总长度为2的所有Document。(例如:北京,北平,会被检索到;北方大区不会被检索到)11。多id查询Document
  该id指的是document在创建时指定的id的值。GETpostilhubusersearch{query:{ids:{values:〔1,2,3〕}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询id为1,2,3的Document。12。模糊查询Document
  模糊距离范围:02
  比方说,原数据是elasticsearch关键字为elasticsearch,与原数据0处不同,模糊距离为0,可以模糊匹配。关键字为alasticsearch,与原数据1处不同,模糊距离为1,可以模糊匹配。关键字为alesticsearch,与原数据2处不同,模糊距离为2,可以模糊匹配。关键字为alestixsearch,与原数据3处不同,模糊距离为3,不可以模糊匹配。
  如果关键词长度在2以内,最大模糊距离为0。(关键词和原数据必须完全匹配)
  如果关键词长度在35之间,最大模糊距离为1。(关键词最多和原数据有1处不同)
  如果关键词长度大于5,最大模糊距离为2。(如上示例)GETpostilhubusersearch{query:{fuzzy:{content:alasticsearch}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询content字段数据能模糊匹配alasticsearch的Document。
  注意:在以英文作为关键词检索的时候,关键词中不能包含大写字母,因为ES会将全部英文内容转小写。
  content类型为text,以下同理。13。布尔查询Document
  布尔查询可以组合上述所有查询,从而完成更复杂的查询。must:相当于,表示与,其中的查询条件必须同时满足。should:相当于,表示或,其中的查询条件满足一个就行。mustnot:相当于!,表示非,其中的查询条件必须同时不满足。GETpostilhubusersearch{query:{bool:{mustnot:〔{term:{age:{value:21}}},{range:{age:{gte:10,lte:20}}}〕}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询age字段不等于21,且大于等于10,且小于等于20的Document。14。多字段查询Document
  如果搜索目标字段分词,那么ES会先将query中的关键词分词,然后再分别搜索。
  如果搜索目标字段不分词,那么ES就会拿query中的关键词整体去搜索。GETpostilhubusersearch{query:{multimatch:{query:北京,fields:〔intro,content〕}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询intro字段数据中是北京的Document和content字段数据中包含北或京的Document。
  官方建议在fields中设置的字段都为分词字段,这样搜索范围更广。
  intro类型为keyword,以下同理。15。多字段分词查询Document
  该种查询方式无论目标字段是分词还是不分词,都会强行将query中的关键词分词,然后在分别搜索。GETpostilhubusersearch{query:{querystring:{query:北京,fields:〔intro,content〕}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询intro字段数据中是北或京的Document和content字段数据中包含北或京的Document。
  还可以指定分词器,指定分词规则(下文设置为IK分词器的ikmaxword分词模式):GETpostilhubusersearch{query:{querystring:{query:北京,fields:〔intro,content〕,analyzer:ikmaxword}}}复制代码
  注意:设置的分词器或者分词模式必须和存储时设置的分词器或者分词模式相同,否则检索会出错。16。查询结果高亮
  图片中红色的Java就是搜索关键词在结果中的高亮显示。它不属于查询范畴,属于对查询结果的二次渲染。
  高亮的实现原理就是在关键字文本上加标签。但是ES并没有修改原数据,而是拷贝一份原数据单独做修改封装成highlight对象和原document数据一起返回。所以如果要使用带有关键字高亮的文本,我们需要从highlight对象中取出修改后的数据,替换原数据。GETpostilhubusersearch{query:{term:{content:{value:java}}},highlight:{pretags:〔spanstylecolor:red〕,posttags:〔span〕,fields:{content:{}}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询content字段数据中有java的Document,并将返回的原Document数据的content字段的数据中的所有的java标红,并封装在highlight对象中一起返回。
  pretags和posttags可以定制高亮的形态。GETpostilhubusersearch{query:{term:{content:{value:java}}},highlight:{pretags:〔spanstylecolor:red〕,posttags:〔span〕,fields:{:{}}}}复制代码
  上面指令的含义为:在名为postilhub的Index下,名为user的Type下,查询content字段数据中有java的Document,并将返回的原Document数据的所有字段的数据中的java标红,并封装在highlight对象中一起返回。
  来源:https:juejin。cnpost6995451943892025351
投诉 评论 转载

瑶指金牌勇创佳绩石家庄运动员周瑶佳与队友为中国队斩获飞碟世锦2022年国际射联飞碟射击世锦赛于当地时间2022年9月19日10月12日在克罗地亚奥西耶克举行。中国射击队在飞碟双向青年组女子团体赛中战胜美国队,夺得中国队在本届飞碟射击世锦……若一哥离开勇士,阿德or安东尼or阿里扎,谁才是最好的替代者如果说水花兄弟是勇士王朝的进攻核心,格林是勇士王朝的防守中枢的话,那么,伊戈达拉毫无疑问就是开启勇士王朝的秘钥,因为伊戈达拉效力勇士的时间没有水花兄弟格林久,四个总冠军一个都没……体验创新数据驱动和敏捷迭代是企业增长的三大动力文鲁扬火山引擎市场总经理体验创新、数据驱动和敏捷迭代是以业务价值为先的增长动力‘三要素’。当世界慢下来,有动力的企业依然会增长。8月26日28日,在崔牛会和全国6大……隐藏目的暴露?佩洛西窜台欲控台积电,中美高端芯片要激烈竞争?佩洛西竟然不顾中国强烈反对,肆意窜访台湾,背后究竟隐藏了什么目的呢?有媒体曾曝出大料:佩洛西窜访台湾隐藏的目的竟然是想要控制台积电。(图为媒体爆料消息的截图)……适量饮酒,有益健康?研究发现长期喝酒,或增加7种癌症的风险白酒在我国文化中有着举足轻重的地位上至杯酒释兵权下至把酒相言欢人们之所以对酒如此钟爱不仅因为它清香醇厚的口感还因为坊间传言它有着活血御寒、强……Elasticsearch高级检索检索原理每一个Index都被分成两个区,一个是索引区,一个是元数据区(文档区)。当一个Document存储进入Index时,存放的位置是Index的文档区,ES会给……花呗也有不合理之处?年轻人主动关闭花呗,过来人越欠越多中国人还爱存钱吗?中国人偏爱储蓄,居民储蓄率非常高,尤其是老一辈人,省吃俭用之下,银行账户中有着一笔不菲的储蓄。近几年,互联网金融的崛起,花呗等消费信贷产品的出现很大程度……以下习惯,如果你做到5条以上,说明你比想象中更健康噢长寿,一直为人们所津津乐道,可若没有长寿的意识,健康的习惯,那就仅是纸上谈兵了。1肚子上少肉人到一定年纪,发福是很正常的事情。但肚子上肉太多,说明健康的隐患可……秋天是丰收的季节,八款蔬菜要多吃,现在吃正当季,老少皆宜大家好这里是香姐说美食,每天分享好吃的家常菜。现在进入秋天了,很多新鲜的瓜果蔬菜也陆续上市了,可以选择的蔬菜多了起来。今天分享八款可以常吃的蔬菜,现在吃正当季,营养很丰富,大人……洗衣机不懂选?看看这台就够了洗衣机是普及率较高的家用电器,给我们生活带来了诸多的便利!而现在的洗衣机从销量来看,滚筒洗衣机占据了主流,的确,滚筒洗衣机比立式搅拌式洗衣机实用性更强!现在正值618电商节(今……新机扎堆发布,且看高端机神仙打架新机扎堆发布,配置拉满,你更期待哪一款呢?vivoX90Pro,首发天玑9200自研V2芯片,LPDDR5XUFS4。0,2K高频调光护眼屏,5000万1英寸大底IMX9……2022雪山音乐节濮曼与你一起雪山脚下呼唤peacelove云南历来被认为是最适宜雷鬼乐生长的土壤更被乐迷冠以云买加的称谓十一月的丽江雪山音乐节就让云买加继承者濮曼乐队带你在雪山脚下聆听属于自己世界的……
中年女人扮嫩有段位!学会这2点建议,3个方法,就是高手梅西世界杯输球,C罗与曼联解约,最强球员再入自由市场42岁姚明现身福建!参加授牌仪式遭路人围观,脸色严肃仓促离开维金斯伤停近一个月,勇士4胜7负,养生慢板作用一览无余洛杉矶德比交流!美媒提快船4换1交易,湖人更换核心就是现在?为什么脑梗总是发生在清晨贝利遗孀,一身黑裙配长发出席葬礼仪式,拿纸巾擦泪楚楚动人年糕带你环游世界第七十站萨摩亚这5件事的黄金时间点可别错过,早饭锻炼洗澡受益翻倍云天刀iOS手游正式上线,对腾讯云游戏意味着什么国羽总成绩提升,男队期待低谷奋起羽毛球世锦赛综述vivoY77e(t1版)上架后置主摄更换5000万像素摄像跑步造句用跑步造句大全31省份户籍改革方案出齐取消农业户口会否影响权益汽车方向盘助力油雷军官宣小米12Ultra,新骁龙8120倍变焦120W快充发泡聚氨酯优缺点(发泡聚氨酯材料)揭秘刑天和蚩尤隐藏着怎样不为人知的关系香蕉象鼻虫有什么危害如何防治附图片高瓴携手纳析科技,推动生命科学基础研究向细胞更深处迈进陪着你慢慢地走极简生活让你获得100的满足感!躺平的人生我真是瞎了眼了

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利