ElasticSearch:组合查询或复合查询

Bool查询

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

Bool过滤器

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

Range查询和过滤

用于查询介于一定范围之内的值,适用于数字,日期,字符串。 | 参数 | 含义 | | :----: | :----: | |gt | 搜索大于某值的字段,不包括该值本身 |gte | 搜索大于某值的字段,包括该值本身 |lt | 搜索小于某值的字段,不包括该值本身 |lte | 搜索小于某值的字段,包括该值本身

使用range查询时,请仔细考虑一下过滤器是否为更好的选择。由于在查询范围之中的文档是二元的匹配(“是的,文档在范围之中”或者“不是,文档不在范围之中”), range 查询不必是查询。为了获得更好的性能,它应该是过滤器。如果不确定使用查询还是过滤器,请使用过滤器。在99%的用例中,使用range过滤器是正确的选择。

Prefix查询与过滤

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

wildcard查询

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

exists过滤器

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

missing过滤器让你可以搜索字段里没有值,或者是映射时指定的默认值的文档(也叫作null值,即映射里的nul1_ value)。 为了搜索缺失reviews字段的文档,可以使用下面这样的过滤器: clipboardclipboawwrd常用案例中使用哪些类型的查询 |用例 | 使用的查询类型| | :----: | :----: | |你想从类似Google的界面接受用户的输入,然后根据这些输入搜索文档 |如果想支持+/-或者在特定字段中搜索,就使用match查询simple query_ string查询| |你想将输入作为词组并搜索包含这个词组的文档,词组中的单词间也许包含一些间隔(slop)| 要查找和用户搜索相似的词组,使用match phrase查询,并设置一定量的slop| |你想在not_ analyzed字段中搜索单个的关键词,并完全清楚这个词应该是如何出现的| 使用term查询,因为查询的词条不会被分析 你希望组合许多不同的搜索请求或者不同类型的搜索,创建一个单独的搜索来处理它们 使用bool查询,将任意数量的子查询组合到一个单独的查询| |你希望在某个文档中的多个字段搜索特定的单词| 使用multi_ match查询,它和match查询的表现类似,不过是在多个字段上搜索| |你希望通过一次搜索返回所有的文档 |使用match_all查询,在---次搜索中返回全部文档| |你希望在字段中搜索一定取值范围内的值| 使用range查询,搜索取值在一定范围内的文档| |你希望在字段中搜索以特定字符串开头的取值| 使用prefix查询,搜索以给定字符串开头的词条| |你希望根据用户已经输入的内容,提供单个关键词的自动完成功能| 使用prefix查询,发送用户已经输入的内容,然后获取以此文本开头的匹配项| |你希望搜索特定字段没有取值的所有文档| 使用missing过滤器过滤出缺失某些字段的文档

转载于:https://my.oschina.net/u/3656204/blog/3100110

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ElasticSearch是一款基于Lucene的分布式搜索引擎,支持各种类型的查询。其中组合查询是指将多个查询条件组合起来进行查询,可以使用ElasticSearch的bool查询实现。 bool查询是一种复合查询,可以将多个查询条件组合起来,支持must、must_not、should、filter四种查询方式。 - must:表示必须匹配的查询条件,相当于“AND”的关系。 - must_not:表示必须不匹配的查询条件,相当于“NOT”的关系。 - should:表示可选匹配的查询条件,相当于“OR”的关系。 - filter:表示不评分的过滤条件,相当于must的变种,但它不会影响评分。 下面是一个使用bool查询实现组合查询的例子: ``` { "query": { "bool": { "must": [ { "match": { "title": "Elasticsearch" }}, { "match": { "content": "search" }} ], "must_not": [ { "match": { "content": "java" }} ], "should": [ { "match": { "author": "John" }}, { "match": { "tags": "elk" }} ], "filter": [ { "range": { "date": { "gte": "2022-01-01" }}} ] } } } ``` 上述查询语句中,我们使用bool查询将多个查询条件组合起来: - must条件表示title必须包含Elasticsearch,content必须包含search,相当于“Elasticsearch AND search”的关系。 - must_not条件表示content必须不包含java,相当于“NOT java”的关系。 - should条件表示author必须包含John,或tags必须包含elk,相当于“John OR elk”的关系。 - filter条件表示date必须大于等于2022-01-01,但不影响评分。 通过使用bool查询,我们可以实现各种复杂的组合查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值