可以根据默认的映射规则,产生基本的查询!
GET /userlist/user/_search?q=name:老崔
复杂操作搜索 select ( 排序,分页,高亮,模糊查询,精准查询!)
GET userlist/user/_search
{
"query": {
"match": {
"name": "崔"
}
}
}
_source 输出结果,等同于mysql : select name, age from user;
排序
分页查询
我们可以通过设置"from"和"size"参数来设置分页查询的相关信息。
通过布尔值查询的方式我们可以实现类似于数据库的多条件查询:
例如通过这个must指令就可以实现多条件查询,在上图中,只有同时满足name中包含老崔,并且年龄为88的数据才会被查询出。简单的来说满足这两个条件就会返回true的布尔值然后被查询出来,所以被叫做布尔值查询,相当于sql语句中的where and条件语句。
而should命令则表示后方的两个条件只需要满足其中之一即可,就类似于sql语句中的where or条件语句。
同理,must_not表示查询出不满足条件的数据,例如上图查询出年龄不为18的信息,相当于sql中的not条件语句。
在满足多种条件查询的同时,es也支持我们对查询的数据进行进一步的筛选过滤。
通过上图的配置可以实现按照年龄大小进行进一步过滤的操作,gte是大于等于操作,lte是小于等于操作,gt只表示大于操作,lt只表示小于操作。
同时,也可以同时设置大于和小于来进行值的区间搜索操作,相当于sql中的between and条件。
匹配多个条件查询就有点类似于sql中的in关键字。
如图所示,tags是兴趣标签,在数据中是以数组的形式存在的,也就是说有多个值,通过这种方式就可以进行多个值的随意匹配。
term精确匹配和match的不同:
term会将条件依据倒排索引进行精确匹配,而match则会将查询条件进行分词然后再匹配。简单的来说,match会产生类似与模糊查询的效果,而term不会,条件匹配不上即使数据包含查询条件也不会被查询出来。
关于text和keyword类型:
text类型和keyword的不同之处在于,text会被分词器进行分词,而keyword不会被分词器分词。