基本概念:
cluster:集群
集群就是多个服务器,集群中的每一个服务器就是一个节点–node。其中有一个主节点,主节点这个概念是对于集群内部而言的。
对集群外部来说,是无中心节点的,与集群任何一个节点通信和与整个集群通信是一样的。
shards:分片
es可以把一个完整的索引分为多个分片放在不同的节点保存,这样做的好处是高可用,如果有一台宕机了,其他节点的分片副本组合起来也是一个完整的索引,数据不会丢失。
分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas:副本
副本指的是分片的副本。副本的作用有两点,
一是提高系统的容错性,如果某个节点的某个分片损坏时,可以从副本中恢复。
二是可以提高查询效率,es会自动对查询请求负载均衡。
查询的种类:
叶查询子句:
这种查询可以单独使用,针对某一特定的字段查询,比如matchQuery、termQuery、rangeQuery等。
复合查询子句:
这种查询配合其他的叶查询或者复合查询,用于在逻辑上组成更复杂的查询,比如bool查询,提供三种api:
must、must_not、should,类似于SQL的and,not和or。
filter和query的区别?
关注点
1.query关注点:此文档与查询子句的匹配程度
filter关注点:此文档与查询子句匹配吗?
2.query特性:
- 是否包含
只要包含,文档就成为结果的一部分。 - 相关度得分
除了确定文档是否匹配,query还计算了文档的匹配程度的_score,得分越高的文件,搜索排名靠前。
3.query应用场景:
- 全文检索
因为全文检索很少有完全”正确“的答案,所以这种相关性、打分的概念适合全文检索。
例如ik分词后的”中华人民共和国国歌“
3.filter特性:
- 是否包含
确定是否包含在检索结果中,回答只有”是“和”否“ - 不涉及评分
在搜索中没有相关度排名 - 适用于完全精确匹配,范围检索
- 查询速度更快
经常使用的过滤器会被es自动缓存
4.filter使用场景
判断时间是否在2015年到2016年之间?
状态字段status是否设置为某个值?
判断集合使用filter