ES应用场景及核心概念二_踩踩踩从踩的博客-CSDN博客
ES应用场景及核心概念一_踩踩踩从踩的博客-CSDN博客_es适用场景
前言之前得文章解析过ES的应用场景及核心概念,包括介绍基本结构及使用方式,以及各个版本之间的适配,以及type类型的弱化,以及其中分词器的选择等。本篇文章会继续介绍最常用的查询语法的api,request的请求方式,高级的查询方式 以及dsl是什么,dsl语法等。
搜索API(_search API)对于一般的搜索api 在官网中给我们展示的是 search ,包括uri search
这其中最重要的是 Request body Search ,在其中简单就是 实现的方式,的例子
在实现 查询时,可以 针对的属性进行设置,包括查询 ,排序 属性 sort. 第一层级 查询的语句
在使用时,排序 指定sort ,根据字段 进行排序,在使用时,可以组装起来进行使用,这里面 判断 state 进行排序。需要查看类型 然后进行排序的。
在ES中,如果是integer的类型, 排序 并 用max 或者 min 等函数进行排序,
按照聚合值进行排序这些。还可以多个值进行排序 分页,
在官网,对于from+size 需要小于等于10000.,这个是由于,在分片取数据时,并不能保证 每个分片的数据平均的排序数据,因此在取时,每个分片都要取,因此数据量太大会导致性能问题,因此只能做限制。
每次都要去取数据
官网中提出 对于分页,并不适合用于交互式的场景。
可以采用 不用form size的方式 ,先指定size 和sort 排好过后 加上 search_after 查找之后的值,这种方式就可以
通过callapse进行折叠数据,相同的值进行去重
而且还可以采用多个字段进行折叠 inner_hit
以及在搜索时,使用match 将 分隔进行搜索,并将得分匹配度,
还可以添加最小过滤参数
对于第一级查询的关键字,这都是ES提供的。
并且提供了高亮的语句
ES对于这种处理,也就是 反向索引时,会将下标位置 次数都会存下来。来达到高亮的情况。
Query DSLDSL是什么:
- Domain Specific Language:领域特定语言
- Elasticsearch基于JSON提供完整的查询DSL来定义查询。
- 叶子查询字句(Leaf query clauses)
- 复合查询字句(Compound query clauses )
也就是将叶子查询组合起来做事。
Query and filter context Query and filter context 一个查询断言(clause)的行为,取决于它是用在query context 还是 filter context 中 。 Match all query 最单一的 query ,匹配所有的文档,并且 _score 都为 1.0不管怎么的,就把所有的文档进行查询出来,并且可以指定相关性得分。
对于相反的,match_none
Full text queries full text queries 用来搜索被分词后的text类型字段,比如对邮件内容 进行搜索,搜索时,query string会使用索引数据时相同的analyzer进行分词。
文档索引时,先分词为反向索引。都会进行匹配,然后得到数据。
对于全文检索来说,最常用的match
这里是按照or进行分词查询的。
把 符合条件的查询出来。 当然也可以设置为and.并且在基础上设置容错。这都是在es中可以使用的。
这里还可以 指定查询的时候,间隔一个单词的情况,认为他是一个单词,也可以进行匹配。
并且可以指定多个字段进行查询匹配
匹配数组的情况进行查询
查询两个字符之间的数据进行查询
对于简单的查询语句, 这里 take 查询的情况。
Common terms query 停用词 在文本中出现一些没有用不必检索的词,提高检索效率。 索引时应用停用词处理会影响查询精度?若不做停用词处理,会应向查询,如何协调这两个问题呢?
对于
the brown fox not happy 这些词,需要检索,但是被忽略掉了,会出现查询不到的情况。 Common terms query会区分高频词、低频词, 我们可以通过cutoff_frequency来指定一个分界值,将搜索文本中的词分为高频词和低频词,低频词的重要性高于高频词。- > 先对低频词进行搜索,并计算所有匹配文档相关性得分;
- > 再搜索和高频词匹配的文档,这会搜到很多文档,不计算得分
- > 取交集,交集中的文档进行高频词得分计算
- > 高频词的得分和低频词得分相加,作为文档得分。实际执行的搜索是 必须包含低频词 + 或包含高频词。
高低频词的得分计算
Term level queries term-level queries 不会像 full text queries 那样对query string进行分词,而是直接在反向索引中匹配当前term,如果是对keyword字段查询时,会用被查询字段的normalizer进行标准化。 term-level queries 经常用于查询结构化数据,比如numbers、date ranges、IP addresses、prices、product IDs. 在es中 精确查询的格式,以及多字段选择的数据 相当于in
对于这些文档 也可以采用 gte
查询时,使用 isnull,进行查询
Compound queries compound queries 会包裹其他 compound queries 或 leaf queries ,合并它们的查询结果及相关性得分,改变他们的行为。 找文档是否相关,评判文档是否相关性,判断 有多少相关性。
表示逻辑的部分,这里在使用时,结合起来,must_not 必须不存在
这里在es中 多个叶子的查询,每个叶子都会匹配到文档中。



