ES基本查询
term 和 terms查询机制都是一样的,都不会将制定的查询关键字进行分词,直接去分词库中匹配。
term 是针对一个字段包含一个值的时候使用,类似于mysql里的“=”。
terms 是针对一个字段包含多个值的时候使用,类似于mysql里的in(?,?)。
match查询:match查询属于高级查询,会根据你查询的字段的类型不一致,采用不同的查询方式。
- 如果查询的是日期或者数值的字段,他会自动将你的字符串查询内容转换成日期或者数值待;
- 如果查询的内容是一个不能被分词的字段(keyword).match查询不会对你的指定查询关键字进行分词;
- 如果查询的内容是一个可以分词的字段(text),match会将你指定的查询内容根据一定的方式去分词,然后去分词库中匹配指定的内容。
- 总而言之:match查询,实际底层就是多个term查询,将多个term查询的结果汇集到一起返回给你。
match_all 查询全部内容,不指定任何条件
multi_match查询
多字段进行匹配, 只要有一个字段满足搜索条件, 就能查询出来, 对于多字段匹配的问题, 涉及到评分, 可以通过type来指定评分标准,有三种类型,分别是: best_fields: 完全匹配的文档占比高, 可以通过tie_breaker指定评分的系数;most_fields:表示越多字段匹配的文档评分越;
bool联合查询
其中 must: 表示文档必须完全匹配
must_not: 表示文档必须不能匹配
should表示下面的条件只要有一个满足, 就能查出来, 类似sql的or
range范围查询
类似于sql里的between and