ES学习
最近项目中,需要根据用户输入的关键词检索出对应数据,就需要ES来作索引,根据关键词检索出匹配的数据id,然后根据id去查mysql数据库。之前粗略看过ES相关知识,但实际应用还是需要更多的知识。
1 基本概念
1.1 ElasticSearch的主要功能及应用场景
Elasticsearch 是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API 。
然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:
- 一个分布式的实时文档存储,每个字段可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
- 主要功能:
1)海量数据的分布式存储以及集群管理,达到了服务与数据的高可用以及水平扩展;
2)近实时搜索,性能卓越。对结构化、全文、地理位置等类型数据的处理;
3)海量数据的近实时分析(聚合功能)
- 应用场景:
1)网站搜索、垂直搜索、代码搜索;
2)日志管理与分析、安全指标监控、应用性能监控、Web抓取舆情分析;
著作权归@pdai所有
原文链接:https://pdai.tech/md/db/nosql-es/elasticsearch-x-introduce-1.html
1.2 基本概念
关系型数据库主要用来作数据的存储,而ES用来作数据的检索。
- Cluster 集群 ,一个集群由一个唯一的名字标识,默认为“elasticsearch”。集群名称非常重要,具有相同集群名的节点才会组成一个集群。集群名称可以在配置文件中指定。
- Node 节点 :存储集群的数据,参与集群的索引和搜索功能。像集群有名字,节点也有自己的名称,默认在启动时会以一个随机的UUID的前七个字符作为节点的名字,你可以为其指定任意的名字。通过集群名在网络中发现同伴组成集群。一个节点也可是集群。
- Index 索引 : 一个索引是一个文档的集合(等同于solr中的集合)。每个索引有唯一的名字,通过这个名字来操作它。一个集群中可以有任意多个索引。
- Type 类型 :指在一个索引中,可以索引不同类型的文档,如用户数据、博客数据。从6.0.0 版本起已废弃,一个索引中只存放一类数据。注:ES7中已经不再使用这个概念。
- Document 文档 :被索引的一条数据,索引的基本信息单元,以JSON格式来表示。
- Shard 分片 :在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上。
- Replication 备份 : 一个分片可以有多个备份(副本)
- Routing 路由:
2 查询语法
查询条件:query or filter
1 |
|
在布尔查询中,查询被分为Query Context 和 Filter Context,查询上下文由query参数指定,过滤上下文由filter和must_not参数指定。这两个查询上下文的唯一区别是:Filter Context不影响查询的评分(score)。在布尔查询中,Filter参数和must_not参数使用Filter Context,而must和should使用Query Context,经常使用Filter Context,引擎会自动缓存数据,提高查询性能。
query 上下文的条件是用来给文档打分的,匹配越好 _score 越高;filter 的条件只产生两种结果:符合与不符合,后者被过滤掉 。
must相当于 and
should 相当于 or,对于should子句,它一般包含多个子查询条件,参数 minimum_should_match 控制文档必须满足should子句中的子查询条件的数量,只有当文档满足指定数量的should查询条件时,should子句返回的逻辑结果才是true。当filter与should一起使用,should没有满足任何条件,此时should失效了,es会默认查询所有数据,然后返回全部符合filter条件的数据。
must_not相当于 not
bool查询也支持嵌套查询,构造更为复杂的查询语句:
1 | { |
filter上下文
term
terms
参考资料
https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-intro.html
https://pdai.tech/md/db/nosql-es/elasticsearch-x-index-mapping.html