DSL语言
ES最主要是用来做搜索和分析的。所以DSL还是对于ES很重要的
下面我们写的代码都是RESTful风格
query DSL:domain Specialed Lanaguage 在特定领域的语言
案例:我们要进行全表扫描使用DSL语言,查询所有的商品
使用match_all
可以查询到所有文档,是没有查询条件下的默认语句。
案例:查询所有名称里面包含chenyi的商品,同时按价格进行降序排序
如上图所示,name为dior chenyi的数据会在ES中进行倒排索引分词的操作,这样的数据也会被查询出来。
match
查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。
下面我们按照价格进行排序:因为不属于查询的范围了。所以要写一个 逗号
这样我们的排序就完成了
案例:实现分页查询
条件:根据查询结果(包含chenyi的商品),再进行每页展示2个商品
案例:进行全表扫面,但返回指定字段的数据
现在的情况是把所有的数据都返回了,但是我们想返回指定字段的数据内容就需要下面的方法了
案例:搜索名称里面包含chenyi的,并且价格大于250元的商品
相当于 select * form product where name like %chenyi% and price >250;
因为有两个查询条件,我们就需要使用下面的查询方式
如果需要多个查询条件拼接在一起就需要使用bool
bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含以下操作符:
must :: 多个查询条件的完全匹配,相当于 and。
must_not :: 多个查询条件的相反匹配,相当于 not。
should :: 至少有一个查询条件匹配, 相当于 or。
这些参数可以分别继承一个过滤条件或者一个过滤条件的数组
案例:展示一个全文检索的效果
首先查询条件也会进行分词
kama
chenyi
并集
案例:不要把条件分词,要精确匹配
但是我们现有有一种需求我就是想查询kama chenyi不要分词,要精确匹配到
百度就类似于这样
案例:把查询结果进行高亮展示
kama这个标签是默认的标签,是可以自定义的进行替换的,比如我们可以替换成kama,把这个输出到网页上,自然而然就是红色的了。