ElasticSearch:组合查询或复合查询

Bool查询

容许在单独的查询中组合任意数量的查询,指定的查询语句表名哪些部分是必须匹配(must)、应该匹配(should)或不能匹配(must_not)segmentfault

Bool过滤器

和查询功能一致,可是同等状况下,推荐使用过滤器性能

Range查询和过滤

用于查询介于必定范围以内的值,适用于数字,日期,字符串。spa

参数 含义
gt 搜索大于某值的字段,不包括该值自己
gte 搜索大于某值的字段,包括该值自己
lt 搜索小于某值的字段,不包括该值自己
lte 搜索小于某值的字段,包括该值自己
使用range查询时,请仔细考虑一下过滤器是否为更好的选择。因为在查询范围之中的文档是二元的匹配(“是的,文档在范围之中”或者“不是,文档不在范围之中”),
range
查询没必要是查询。为了得到更好的性能,它应该是过滤器。若是不肯定使用查询仍是过滤器,请使用过滤器。在99%的用例中,使用range过滤器是正确的选择。

Prefix查询与过滤

和term查询相似,prefix 查询和过滤器容许你根据给定的前缀来搜索词条,这里前缀在搜索以前是没有通过分析的。例如,为了在索引中搜索以“liber” 开头的所有活动。blog

wildcard查询

字面意思,通配符查询,可以使用 *,?来匹配任意字符。索引

exists过滤器

正如其名,exists 过滤器容许你过滤文档,只查找那些在特定字段有值的文档,不管其值是多少。exists 过滤器看上去是这样的
005OiRqWgy1g6gjsa23spj30u70c3n05ip

missing 过滤器

missing过滤器让你能够搜索字段里没有值,或者是映射时指定的默认值的文档(也叫做null值,即映射里的nul1_ _value)。 为了搜索缺失reviews字段的文档,可使用下面这样的过滤器:
clipboard
clipboawwrd
经常使用案例中使用哪些类型的查询rem

用例 使用的查询类型
你想从相似Google的界面接受用户的输入,而后根据这些输入搜索文档 若是想支持+/-或者在特定字段中搜索,就使用match查询simple_ query_ string查询
你想将输入做为词组并搜索包含这个词组的文档,词组中的单词间也许包含一些间隔(slop) 要查找和用户搜索类似的词组,使用match phrase查询,并设置必定量的slop
你想在not_ analyzed字段中搜索单个的关键词,并彻底清楚这个词应该是如何出现的 使用term查询,由于查询的词条不会被分析
你但愿组合许多不一样的搜索请求或者不一样类型的搜索,建立一个单独的搜索来处理它们 使用bool查询,将任意数量的子查询组合到一个单独的查询
你但愿在某个文档中的多个字段搜索特定的单词 使用multi_ match查询,它和match查询的表现相似,不过是在多个字段上搜索
你但愿经过一次搜索返回全部的文档 使用match_all查询,在---次搜索中返回所有文档
你但愿在字段中搜索必定取值范围内的值 使用range查询,搜索取值在必定范围内的文档
你但愿在字段中搜索以特定字符串开头的取值 使用prefix查询,搜索以给定字符串开头的词条
你但愿根据用户已经输入的内容,提供单个关键词的自动完成功能 使用prefix查询,发送用户已经输入的内容,而后获取以此文本开头的匹配项
你但愿搜索特定字段没有取值的全部文档 使用missing过滤器过滤出缺失某些字段的文档
相关文章
相关标签/搜索