学习资料:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/distrib-write.html
笔记:
一个 Elasticsearch 集群可以 包含多个 索引(数据库中的表) ,相应的每个索引可以包含多个 类型 (???)。 这些不同的类型存储着多个 文档 (表中的每一条记录),每
个文档又有 多个 属性 。
一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。
当一个节点被选举成为 主节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。 而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。 任何节点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。
作为用户,我们可以将请求发送到 集群中的任何节点 ,包括主节点。 每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。 Elasticsearch 对这一切的管理都是透明的。
如果只是在相同节点数目的集群上增加更多的副本分片并不能提高性能,因为每个分片从节点上获得的资源会变少。 你需要增加更多的硬件资源来提升吞吐量。
GET 请求的响应体包括 {“found”: true} ,这证实了文档已经被找到。 如果我们请求一个不存在的文档,我们仍旧会得到一个 JSON 响应体,但是 found 将会是 false 。 此外, HTTP 响应码将会是 404 Not Found ,而不是 200 OK 。
所有文档的更新或删除 API,都可以接受 version 参数,这允许你在代码中使用乐观的并发控制,这是一种明智的做法。
文档是不可变的:他们不能被修改,只能被替换。 update API 必须遵循同样的规则。
Node 3 在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2 的副本分片上。一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功。
你可以用 bool 查询来实现你的需求。这种查询将多查询组合在一起,成为用户自己想要的布尔查询。它接收以下参数:
must
文档 必须 匹配这些条件才能被包含进来。
must_not
文档 必须不 匹配这些条件才能被包含进来。
should
如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。
filter
必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。
当一个搜索请求被发送到某个节点时,这个节点就变成了协调节点。 这个节点的任务是广播查询请求到所有相关分片并将它们的响应整合成全局排序后的结果集合,这个结果集合会返回给客户端。
分析与分析器???
映射???
复杂核心域类型???
字符串排序与多字段???
什么是相关性???
Doc Values 介绍???
配置分析器
自定义分析器
类型和映射
根对象
动态映射
自定义动态映射
缺省映射
分片内部原理
要查询所有索引的列表,您可以使用Elasticsearch的HTTP请求来执行以下操作:
GET /_cat/indices
发送上述HTTP请求后,Elasticsearch将返回一个包含所有索引的列表。每个索引的信息将以表格形式呈现,包括索引名称、文档数量、主分片数量、副本分片数量等。
以下是一个示例,查询所有索引的列表:
GET /_cat/indices
响应示例:
yellow open index1 5 1 1000 0 1.2mb 1.2mb
yellow open index2 5 1 2000 0 1.5mb 1.5mb
green open index3 5 1 3000 0 2.0mb 2.0mb
在上述示例中,每一行表示一个索引的信息。每列的含义如下:
- 第一列:索引的状态(yellow表示主分片可用,但副本分片尚未分配;green表示主分片和副本分片都可用)
- 第二列:索引名称
- 第三列:主分片数量
- 第四列:副本分片数量
- 第五列:文档数量
- 第六列:主分片占用的磁盘空间
- 第七列:所有分片(包括主分片和副本分片)占用的磁盘空间
请确保已经正确配置了Elasticsearch的HTTP接口,并且可以通过网络访问到Elasticsearch服务器。发送上述请求后,您将获得一个包含所有索引的响应,可以进一步处理或解析该响应以获取所需的信息。
EQL:
multi_match
Elasticsearch 的 multi_match
查询是用于在一个或多个字段中执行多字段匹配的查询类型。下面我们来详细解释一下 multi_match
查询的 HTTP 请求中的每个参数:
-
query:
- 描述:要搜索的文本或查询字符串。
- 类型:字符串。
- 示例:
"search_text"
-
fields:
- 描述:要在哪些字段中执行匹配。
- 类型:字符串数组。
- 示例:
["field1", "field2"]
-
type(可选):
- 描述:指定匹配类型。
- 类型:字符串。
- 默认值:
best_fields
。 - 示例:
"type": "most_fields"
-
operator(可选):
- 描述:指定多个搜索词之间的逻辑操作符。
- 类型:字符串。
- 默认值:
OR
。 - 示例:
"operator": "AND"
-
tie_breaker(可选):
- 描述:用于调整相同最终评分的文档的排序顺序。
- 类型:浮点数。
- 默认值:1.0。
- 示例:
"tie_breaker": 0.3
-
minimum_should_match(可选):
- 描述:指定应匹配的最小子句数量。
- 类型:字符串或整数。
- 默认值:根据
type
参数的不同而变化。 - 示例:
"minimum_should_match": 2
-
fuzziness(可选):
- 描述:指定容忍的拼写错误或近似匹配的程度。
- 类型:字符串或整数。
- 示例:
"fuzziness": "AUTO"
-
prefix_length(可选):
- 描述:指定模糊查询时要忽略的前缀长度。
- 类型:整数。
- 默认值:0。
- 示例:
"prefix_length": 2
-
max_expansions(可选):
- 描述:控制模糊查询的最大扩展数。
- 类型:整数。
- 默认值:50。
- 示例:
"max_expansions": 100
以上是 multi_match
查询 HTTP 请求中的常见参数及其含义。根据实际需求,你可以使用这些参数来定制你的查询。