ElasticSearch--查询操作
1. 查询
上一篇文章展示了ElasticSearch的一些基本操作,下面主要介绍ElasticSearch的查询相关操作
查询所有:
1 | GET /{index}/_search |
根据id查询:
1 | GET /{index}/{type}/{id} |
除了上述简单查询之外。elasticsearch作为搜索引擎,最复杂最强大的功能就是搜索查询功能。包括:匹配查询、词条查询、模糊查询、组合查询、范围查询、高亮、排序、分页等等查询功能。
基本查询语法如下:
1 | GET /索引库名/_search |
这里的query代表一个查询对象,里面可以有不同的查询属性
- 查询类型:
- 例如:
match_all
,match
,term
,range
等等
- 例如:
- 查询条件:查询条件会根据类型的不同,写法也有差异,后面详细讲解
查询结果:
took
:查询花费时间,单位是毫秒time_out
:是否超时_shards
:分片信息hits
:搜索结果总览对象total
:搜索到的总条数max_score
:所有结果中文档得分的最高分hits
:搜索结果的文档对象数组,每个元素是一条搜索到的文档信息_index
:索引库_type
:文档类型_id
:文档id_score
:文档得分_source
:文档的源数据
1.1. 数据准备
1 | POST /mall/goods/_bulk |
1.2. 匹配查询(match)
匹配所有
1 | GET /mall/_search |
query
:代表查询对象match_all
:代表查询所有
条件匹配
1 | GET /mall/_search |
查询出很多数据,不仅包括小米手机
,而且与小米
或者手机
相关的都会查询到,说明多个词之间是or
的关系。
某些情况下,我们需要更精确查找,我们希望这个关系变成and
,可以这样做:
1 | GET /mall/_search |
1 | { |
子属性匹配
1 | GET /mall/_search |
多字段匹配
match
只能根据一个字段匹配查询,如果要根据多个字段匹配查询可以使用multi_match
1 | GET /mall/_search |
1.3. 词条查询(term)
term
查询被用于
1 | GET /atguigu/_search |
1.4. 范围查询(range)
range
查询找出那些落在指定区间内的数字或者时间
1 | GET /mall/_search |
range
查询允许以下字符:
操作符 | 说明 |
---|---|
gt | 大于 |
gte | 大于等于 |
lt | 小于 |
lte | 小于等于 |
1.5. 布尔组合(bool)
布尔查询又叫组合查询
bool
把各种其它查询通过must
(与)、must_not
(非)、should
(或)的方式进行组合
1 | GET /mall/_search |
注意:一个组合查询里面只能出现一种组合,不能混用
1.6. 过滤(filter)
所有的查询都会影响到文档的评分及排名。如果我们需要在查询结果中进行过滤,并且不希望过滤条件影响评分,那么就不要把过滤条件作为查询条件来用。而是使用filter
方式:
1 | GET /mall/_search |
注意:filter
中还可以再次进行bool
组合条件过滤。
1.7. 排序(sort)
sort
可以让我们按照不同的字段进行排序,并且通过order
指定排序的方式
1 | GET /mall/_search |
1.8. 分页(from/size)
1 | GET /mall/_search |
from
:从那一条开始
size
:取多少条
1.9. 高亮(highlight)
1 | GET /mall/_search |
fields
:高亮字段
pre_tags
:前置标签
post_tags
:后置标签
1.10. 结果过滤(_source)
默认情况下,elasticsearch在搜索的结果中,会把文档中保存在_source
的所有字段都返回。
如果我们只想获取其中的部分字段,可以添加_source
的过滤
1 | GET /atguigu/_search |
返回结果,只有两个字段:
1 | { |