快速入门ElasticSearch(下)( 二 )
{"query": {"term": {"word_count": 5000}}}
这样就可以查询出单词数为5000的文档记录 , 结果如下所示:
文章插图
当然它还支持范围查询 , 此时使用的关键字是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来使用 。 上面例子的过滤结果如下所示:
文章插图
复合条件查询在复合条件查询中 , 常用的两个查询分别是:固定分数查询和布尔查询 。
固定分数查询在学习固定分数查询之前 , 先使用全文搜索来搜索标题中包含入门的文档记录 , 全文搜索使用的关键字是query , 同样使用POST方法 , 但是对应的接口API为 , 注意里面是不写索引的 , 此时相对应的JSON格式信息为:
{"query": {"match": {"title": "入门"}}}
可以看到查询结果是12条 , 也就是将之前的所有记录都查询出来 , 同时发现ES给予每个查询结果都有一个_score它用于体现查询结果的匹配程度 , 也就是得分 , 得分越高表明越匹配查询条件 。 上例的查询结果如下所示:
文章插图
文章插图
所谓的固定分数查询就是只在查询的时候将所有匹配结果的_score值都设置为相同的 , 如下所示:
【快速入门ElasticSearch(下)】{"query": {"constant_score": {"filter": {"match": {"title": "入门"}}}}}
此时查询结果如下所示:
文章插图
假设开发者想指定固定的分数 , 此时可以将上述JSON格式的信息修改为:
{"query": {"constant_score": {"filter": {"match": {"title": "入门"}},"boost": 2}}}
此时查询结果如下所示:
文章插图
由于此处使用了boost固定分数且使用了filter , 因此ElasticSearch会对结果进行缓存 。
推荐阅读
- 苹果两款新iPad齐曝光:性能提高、入门款更轻薄、售价便宜
- “千店同开”引质量担忧,小米回应
- RHEL 9提升了x86_64处理器的入门要求
- 企业|技术快速迭代倒逼知识产权“贴身”服务,上海首家AI商标品牌指导站入驻徐汇西岸
- 三星Galaxy A52 5G通过3C认证 支持最高15W快速充电
- 入门HiFi享好声,这几款耳机绝对值得入手
- 大健康速递丨腾讯上线疫苗接种服务区;华大基因研发出快速鉴定盒
- DIY从入门到放弃:电源挑贵的买就靠谱吗?
- 小米联合京东及爱回收推全新换机服务 帮你快速换新机
- 西安奕斯伟硅产业基地项目建设刷新我国建设大硅片制造项目的最快速度