ElasticSearch7的条件查询
ElasticSearch7的条件查询在项目中很经常用的,这里讲解一些常用的条件查询。
先新建索引/xu:
加几条文档数据进去:
一.带关键字条件的查询
条件查询语法用"match"来匹配条件,比如要查找身高为180的文档数据:
结果为:
当然这种查询同时也是模糊匹配查询,我们查找"from"字段来自"惠州"的文档数据:
这样子也能查出结果来:
诡异的是,下面这种也能查询出数据来:
上面这种情况放在mysql的LIKE模糊查询中是行不通的,在这里只要你输入的数据中有一个字匹配到文档的数据,就会得出相应的结果出来,因为ElasticSearch中的分词器把"阿惠呀"这个条件分成了"阿","惠","呀","阿惠","惠呀","阿惠呀"这些词,同样的"广州惠州"也分成了"广","州","惠","州","广州","惠州"等等这些词,所以“惠”跟“惠”就匹配到了结果。但是这些搜索太笼统了,我们实际做项目的时候往往需要用分词器来制定分词规则,后面的文章会具体讲到分词器的使用。像这种场景我们肯定似曾相识,没错,就是浏览器的搜索引擎,搜索引擎中也是用了倒排索引的原理根据制定好的分词规则来搜索出结果的。
二.排序查询
ElasticSearch排序用"sort"字段来实现,比如按照身高"height"从高到低排序:
结果为:
这里注意一下,我们加了排序条件之后,"_score"字段就是null值了,因为我们已经把ElasticSearch默认的打分规则(TF-IDF原理)给破坏掉了,这样就能够按照我们制定的排序规则来排序。
三.聚合查询
聚合查询一般用来统计数据的,以"aggs"字段实现聚合查询,比如说我要查询各个身高段的人有多少个:
再插入一条身高为180的数据:
再执行聚合查询就能查出各个身高段的人数出来: