这里的数据是接着上篇基础回顾的数据基础做的复杂操作
复杂查询
我们在使用mysql 的时候,经常容易出现一些复杂的查询,如:排序,分页,高亮,模糊查询,精准查询
上面的查询是一个精写的,我们可以拆开查询就是
我们再次查询一下“娇娇”这个词。
hit里是什么?
hit 里主要是 索引和文档的信息
查询的结果总数
查询出来的具体文档,数据中的东西都可以遍历出来了
分数:我们可以通过来判断谁更加符合结果。
这是我们现在里面有的数值
需求:假如我们现在要查出来的数据只出现 name不出现age
如果我们用Java来写的话,所有的方法和对象就变成了key
排序操作需求,假设我们现在用age 来排序
分页查询
from 是开始值,size 是结束值。
布尔值查询,多条件查询
must 命令 ,表示所有条件都要符合。 对应mysql 中的where id =xxx and name=xxx
should 相当于mysql 中的or 或者的意思。两个条件满足一个即可。
must_not查询不是 某个字段的
例子
在查询的时候加过滤条件的
需求假如我们现在需要查询名字叫娇娇,过滤条件是年龄大于10 岁
匹配多个条件的
需求假如查我们的tags 里面的 字段匹配
精确查询!
trem 查询是直接通过倒排索引指定的词条进程精确查找的!
关于trem 和 match 的区别
trem ,直接查询精确的。是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇。
案例
match 会使用分词器解析!(会先分析文档,在通过文档进行查询)也可以理解为模糊查询
match 查询会先对搜索的词进行分词,分词完毕后再逐个对分词的结果进行匹配,因此相比于term 的精确搜索,match 是分词匹配搜索。
案例
只要搜索词的分词集合中的一个或多个存在于文档中即可。假如我们要查名字里有“张”这个概念的时候。
由于我的数据里有两个名字一样的,所以出来的分数是一样的。
**字段类型keyword 和text 的理解,结合代码 **
先put 几行数据
添加字段
查看
默认情况下keyword 是不会被分词的
我们可以试试在我们的代码里查询看一下
当我们是 term 查询 +text 的时候还不是精确查找。说明 text 可以被分词器分词
当是 trem +keyword 的时候就只能输入我们desc 里有的字段了
trem + keyword = 精确查找
keyword 不会被分词器分解。
多个值匹配的精确查询
方式一,直接用 terms 方法
方式二
高量查询
我们也可以设置自己的格式
总结
匹配查询
按照条件匹配
精确匹配
区间范围匹配
匹配字段过滤
多条件查询
高亮查询