快速入门ElasticSearch(下)( 二 )


{"query": {"term": {"word_count": 5000}}}这样就可以查询出单词数为5000的文档记录 , 结果如下所示:
快速入门ElasticSearch(下)文章插图
当然它还支持范围查询 , 此时使用的关键字是range , 如果想要查询单词数在5000-9000内的文档记录 , 相对应的JSON格式信息为:
{"query": {"range": {"word_count": {"gte": 5000,"lte": 9000}}}}注意其中的gte和lte , gte是greate than and equals的简写 , 也就是大于或者等于的意思 。 当然我们还可以对时间进行范围查询 , 如查询时间在2017-2018年之间的 , 即时间在2017-01-01至2018-12-31期间的文档记录 , 相对应的JSON格式信息为:
{"query": {"range": {"publish_date": {"gte": "2017-01-01","lte": "2018-12-31"}}}}当然了 , 如果想查询自2017年1月1日到现在的文档记录 , 只需将后面lte中的时间修改为"now"即可 。 这样关于子条件查询Query context的学习就先到此 , 接下来开始学习子条件查询Filter context 。
子条件查询Filter contextFilter context是指在查询过程中 , 只判断该文档是否满足条件 , 只有Yes或者No , 而Query context除了会判断是否满足条件 , 还判断满足条件后的匹配程度 。
Filter context的关键字是bool , 同样使用POST方法 , 相应的接口API为 , 相对应的JSON格式信息为:
{"query": {"bool": {"filter": {"term": {"word_count": 5000}}}}}上面的例子就是过滤出单词数为5000的文档记录 , 注意ES会将filter的数据进行缓存 , 它的速度比query快一些 , 通常需要结合bool来使用 。 上面例子的过滤结果如下所示:
快速入门ElasticSearch(下)文章插图
复合条件查询在复合条件查询中 , 常用的两个查询分别是:固定分数查询和布尔查询 。
固定分数查询在学习固定分数查询之前 , 先使用全文搜索来搜索标题中包含入门的文档记录 , 全文搜索使用的关键字是query , 同样使用POST方法 , 但是对应的接口API为 , 注意里面是不写索引的 , 此时相对应的JSON格式信息为:
{"query": {"match": {"title": "入门"}}}可以看到查询结果是12条 , 也就是将之前的所有记录都查询出来 , 同时发现ES给予每个查询结果都有一个_score它用于体现查询结果的匹配程度 , 也就是得分 , 得分越高表明越匹配查询条件 。 上例的查询结果如下所示:
快速入门ElasticSearch(下)文章插图
快速入门ElasticSearch(下)文章插图
所谓的固定分数查询就是只在查询的时候将所有匹配结果的_score值都设置为相同的 , 如下所示:
【快速入门ElasticSearch(下)】{"query": {"constant_score": {"filter": {"match": {"title": "入门"}}}}}此时查询结果如下所示:
快速入门ElasticSearch(下)文章插图
假设开发者想指定固定的分数 , 此时可以将上述JSON格式的信息修改为:
{"query": {"constant_score": {"filter": {"match": {"title": "入门"}},"boost": 2}}}此时查询结果如下所示:
快速入门ElasticSearch(下)文章插图
由于此处使用了boost固定分数且使用了filter , 因此ElasticSearch会对结果进行缓存 。


推荐阅读