当前位置: 首页 > 后端技术 > Java

弹力叠那些东西【4】

时间:2023-04-01 16:15:05 Java

searchapi实现对es中存储的数据的查询和分析,端点为_search,如GET/_searchquery有两种形式URIsearchRequestbodysearches提供了完整的查询语法QueryDSLdomainspecificlanguageURIsearch是通过url实现的查询参数Search,常用参数如下:q指定查询语句,语法为querystringsyntaxdfq如果q中没有指定字段,默认查询字段,如果不指定,es会查询所有字段sortsortingtimeout指定超时时间timefromsizepaginationGET/my_index/_search?q=alfred&df=user&sort=age:asc&from=4&size=10&timeout=1s查询user字段包含alfred的文档,结果按年龄从小到大排列,第5-14位文件被退回。如果超时为1s,term和phrasealfredway结束等于alfredORway"alfredway"词查询需要顺序泛查询alfred相当于匹配所有字段term在指定字段名中设置:alfredGroupgroupgroupgroup组,用括号指定匹配规则(quickORbrown)ANDfoxstatus:(activeORpending)title:(全文搜索)booleanoperatorANDORNOTname:(tomNOTleee)mustbecapitalized+-对应mustandmust_notname:(tom+lee-alfred)name:((lee&&!alfred)||(tom&&lee&&!alfred))在url中会被解析为空格,使用编码后才能得到结果%2B范围查询范围查询支持数字和日期范围。使用[]表示封闭范围,{}age表示开放范围:[1TO10]age:[1TO10}age:[1TO]age>=1age:[*TO10]age<=10算术记数法age:>=1年龄:(>=1&&<=10)年龄:(+>=1+<=10)通配符正则表达式?代表一个字符*代表0个或多个字符通配符匹配效率低,占用内存大。不建议使用它。如果没有特殊要求,不要在最前面放?/*name:/[ab]oat/正则表达式问题和通配符字符,例如foamroamsProximityqueryproximitysearch"foxquick"~5比较术语的差异,例如"quickfox""quickbrownfox"将被匹配。查询DSL是基于json定义的查询语言。主要包括以下两种字段类型查询,比如term匹配范围等,只查询某个字段。复合查询,如布尔查询,包含一个或多个字段类型查询或复合查询语句字段类型查询全文匹配对文本类型字段进行全文搜索,对查询语句进行分词处理,如matchmatch_phrase等查询类型的分词匹配不对查询语句进行分词处理,直接匹配字段的倒排termtermsrange等查询类型的索引minimum_should_match控制需要匹配的词数。相关性分数是指文档和查询语句之间的相关性。相关性可以通过倒排索引得到与查询语句项匹配的文档列表,那么如何将用户查询所需的文档放在最前面,本质上是一个排序问题。排序的基础是相关分数。相关分数的几个重要概念是术语频率。词频是一个词在文档中出现的次数。frequencydf文档频率,即该词出现的文档数inversedocumentfrequencyidfreversedocumentfrequency与文档频率相反,简单理解为1/df,该词出现的文档数越少,越高correlationfield-lengthnorm文档越短correlationes越高,有两种打分模型tf/idfBM255.X及以后,默认使用matchphrasequery检索字段,顺序需要使用slop参数控制单词之间的间隔。querystring查询类似于urisearchsimplequerys中的q参数查询Tring查询类似于查询字符串,但忽略了错误的查询语法,并支持部分查询语法。常用的逻辑符号如下,不能使用and或not等关键字。对于和|对于OR,对于NOTterm查询,一次传入多个单词,不分词查询范围查询值和日期范围查询日期数学提供了更友好的日期计算方式。now-1d基准日期也可以是更具体的日期,比如2018-01-01使用具体日期时,使用||隔离度计算主要有3个公式:1h1d/d取整时间到天复合查询包含字段类型查询或类型复合类型constant_score查询该查询将其内部查询结果文档的scores设置为1或者使用boost的值居多for结合bool查询实现自定义scorebool查询由一个或多个Boolean子句组成,主要包括以下4个过滤值过滤复合条件的文档不计算relevancescorees只能缓存给filer提高效率做简单匹配查询时不考虑打分,推荐使用filter而不是querymust。文档必须结合must中的所有条件,这会影响相关性分数must_not。该文档不得满足must_not中的所有条件。andsourceapicount获取复合条件的文档数source只返回部分字段