南京网站官网建设,公司企业邮箱有哪些,东莞公司网站制作公司,成都高端室内设计公司写在前面
本文看下查询相关内容#xff0c;这也是我们在实际工作中接触的最多的#xff0c;所以有必要好好学习下#xff01;
1#xff1a;查询的分类
主要分为如下2类#xff1a;
1:基于get查询参数的URI search
2#xff1a;基于post body的request body search这也是我们在实际工作中接触的最多的所以有必要好好学习下
1查询的分类
主要分为如下2类
1:基于get查询参数的URI search
2基于post body的request body search需要用到es的dsldomain sepecific language不管是哪种查询方式都需要指定要查询的索引如下几种方式
分别来看下URI search和request body search。
另测试数据参考这里 。
2URI search
这种方式是通过在uri上设置参数来进行查询可以设置的参数如下
1:q 使用query string syntax来指定要查询值相对比较复杂后边会单独看下
2df,defaut field默认字段如果是不指定的话则会对所有字段查询
3sort 排序
4fromsize分页
5profile可以查看查询是如何被执行的2.1泛查询
查询包含2012的文档 来看下其查询方式在 “profile”-“shards”-“searches”,如下图 泛查询指定df 看下查询方式
2.2指定字段查询
在q中指定字段 查询方式
2.3Term VS Phrase
假定现在我们要查询title中包含”Beautiful Mind“的文档信息第一个想法可能是使用下边这种方式来查询 但是并不是我们期望的结果我们通过查询方式来看下 此时Mind是泛查询。.
同sql语句
select * from t where title like %Beautiful%
union
(select * from t where title like %Mind%unionselect * from t where id like %Mind%unionselect * from t where year like %Mind%...
)那我们如何让es把”Beautiful Mind“当作一句话来查询呢这就要用到PhraseQuery也比较简单只需要使用括起来就行了 看下查询方式
2.4分组查询 2.4.1:AND OR
AND 同写法 即系统默认就是按照带好处理的即must如果想要查询包含Beautiful但是不包含Mind的则在Mind前用- 查询的过程是先执行如下的TermQuery title:beautiful查询到title包含Beautiful的结果集1然后再执行TermQuery title:Mind查询到title包含Mind的结果集2然后取A和B的差集获取最终结果 OR 和AND比较类似可对比学习。
2.4.2:范围查询 实例们
2.4.3:通配符模糊正则 实例们
3request body search
3.1查询所有 查询方式可以看到是MatchAllDocsQuery。
3.2查询所有 可以看到虽然是分页查询但是查询方式和全量查询是一样的都是MatchAllDocsQuery,并且查询越往后的数据效率越低所以es最好不要用来做分页查询通过其他方案来实现。
3.3排序 查询方式可以看到是MatchAllDocsQuery,所以效率也不会高要慎用。
3.4只返回指定字段 正常相当于sqlselect *这里相当于sqlselect order_date,order_id。
3.5:脚本字段 相当于sqlselect concat(order_date, _hello) as my_custom_field。
3.6:match查询 效果同uri searchGET movies/_search?qtitle:(Last OR Christmas)即默认的操作符是OR,可以使用operator来显式指定操作符
3.7:match_phrase 短语查询 等同于uri searchGET movies/_search?qtitle:Last Christmas。 允许中间有其他单词可如下搜索 等同于uri searchGET movies/_search?qtitle:one love~1。
3.8:query_string 查询
dsl的query下写query_string有点像泛查询。 同uri searchGET movies/_search?qon。其实就是不同的写法而已多一种写法多个选择适应更多的应用场景。 当然也可以指定字段增加default_field即可
3.9:simple_query_string 查询
dsl的query下写simple_query_string有点像泛查询。 有需要用query string就行了这里知道即可。
写在后面
参考文章列表