7. Elasticsearch 高级特性


文档摘要

Elasticsearch 高级特性 Elasticsearch 高级特性详解与实践 1. 跨集群复制 (CCR) CCR 允许你在不同的 Elasticsearch 集群之间复制索引数据。这对于灾难恢复、数据本地化和读写分离等场景非常有用。 概念: Leader 集群: 数据的原始来源。 Follower 集群: 复制 Leader 集群数据的集群。 Follower 索引: 在 Follower 集群中创建的只读索引,自动从 Leader 索引同步数据。 实践: 配置 Leader 集群: 在 中设置 。 配置用户权限,允许 Follower 集群访问 Leader 集群。 配置 Follower 集群: 在 中设置 。

7. Elasticsearch 高级特性

Elasticsearch 高级特性详解与实践

1. 跨集群复制 (CCR)

CCR 允许你在不同的 Elasticsearch 集群之间复制索引数据。这对于灾难恢复、数据本地化和读写分离等场景非常有用。

  • 概念:

    • Leader 集群: 数据的原始来源。

    • Follower 集群: 复制 Leader 集群数据的集群。

    • Follower 索引: 在 Follower 集群中创建的只读索引,自动从 Leader 索引同步数据。

  • 实践:

    1. 配置 Leader 集群:

      • elasticsearch.yml 中设置 cluster.remote.connect: true

      • 配置用户权限,允许 Follower 集群访问 Leader 集群。

    2. 配置 Follower 集群:

      • elasticsearch.yml 中设置 cluster.remote.connect: true

      • 添加 Leader 集群的连接信息:

        cluster: remote: leader_cluster: seeds: ["leader_node_1:9300", "leader_node_2:9300"]
    3. 创建 Follower 索引:

      PUT /my_follower_index/_ccr/follow { "remote_cluster": "leader_cluster", "leader_index": "my_leader_index" }
    • 停止 Follower 索引:

      POST /my_follower_index/_ccr/unfollow
  • 图示:

2. 冻结层 (Frozen Tier)

冻结层允许你将不经常访问的索引数据存储在成本较低的硬件上,同时保持可搜索性。这对于需要长期存储大量数据的场景非常有用。

  • 概念:

    • Warm Tier: 存储相对活跃的数据,使用较快的存储设备。

    • Cold Tier: 存储不经常访问的数据,使用成本较低的存储设备。

    • Frozen Tier: 存储极少访问的数据,使用更低成本的存储设备,例如对象存储。

  • 实践:

    1. 配置索引生命周期策略 (ILM):

      PUT _ilm/policy/my_policy { "policy": { "phases": { "warm": { "min_age": "30d", "actions": { "allocate": { "require": { "data": "warm" } } } }, "cold": { "min_age": "90d", "actions": { "allocate": { "require": { "data": "cold" } } } }, "frozen": { "min_age": "365d", "actions": { "freeze": {}, "allocate": { "require": { "data": "frozen" } } } } } } }
    2. 应用 ILM 策略到索引:

      PUT /my_index { "settings": { "index.lifecycle.name": "my_policy" } }
    • 注意: 需要配置合适的节点属性 (node.attr.data) 来区分 Warm、Cold 和 Frozen 节点。
  • 图示:

3. 向量搜索 (Vector Search)

Elasticsearch 增强了向量搜索能力,支持存储和查询向量数据,这对于相似性搜索、推荐系统和图像识别等应用非常有用。

  • 概念:

    • 向量: 将文档、图像或其他数据表示为高维空间中的点。

    • 相似度度量: 用于计算向量之间相似度的算法,例如余弦相似度。

    • 近似最近邻 (ANN) 搜索: 用于在大量向量数据中快速查找相似向量的算法。

  • 实践:

    1. 创建包含向量字段的索引:

      PUT /my_vector_index { "mappings": { "properties": { "my_vector": { "type": "dense_vector", "dims": 128 } } } }
    2. 索引包含向量数据的文档:

      POST /my_vector_index/_doc { "my_vector": [0.1, 0.2, ..., 0.9] }
    3. 执行向量搜索:

      GET /my_vector_index/_search { "query": { "script_score": { "query": { "match_all": {} }, "script": { "source": "cosineSimilarity(params.query_vector, 'my_vector') + 1.0", "params": { "query_vector": [0.2, 0.3, ..., 0.8] } } } } }
    • 更高级的向量搜索可以使用 KNN 查询
    GET /my_vector_index/_search { "knn": { "field": "my_vector", "query_vector": [0.2, 0.3, ..., 0.8], "k": 10, "num_candidates": 100 } }
  • 图示:

4. 脚本评分 (Script Scoring)

脚本评分允许你使用自定义脚本来计算文档的相关性得分,从而实现更灵活的搜索排序。

  • 概念:

    • 脚本: 使用 Painless 脚本语言编写的自定义逻辑。

    • 评分函数: 用于计算文档得分的函数,可以访问文档字段、查询参数和 Elasticsearch 内置函数。

  • 实践:

    GET /my_index/_search { "query": { "script_score": { "query": { "match": { "my_field": "search term" } }, "script": { "source": "Math.log(_score + 1) + doc['my_numeric_field'].value" } } } }
    • 说明:

      • _score 表示原始的 BM25 评分。

      • doc['my_numeric_field'].value 访问文档中的数值字段。

      • Math.log 是 Painless 内置的数学函数。

  • 图示:

5. 索引生命周期管理 (ILM)

ILM 允许你自动化索引的生命周期管理,包括创建、滚动、优化、冻结和删除索引。

  • 概念:

    • 策略: 定义索引生命周期的各个阶段和操作。

    • 阶段: 索引生命周期的不同阶段,例如 Hot、Warm、Cold 和 Delete。

    • 操作: 在每个阶段执行的操作,例如滚动、优化、冻结和删除。

  • 实践:

    1. 定义 ILM 策略 (如上面冻结层例子所示)。

    2. 应用 ILM 策略到索引 (如上面冻结层例子所示)。

  • 图示:

6. 异步搜索 (Asynchronous Search)

异步搜索允许你提交长时间运行的搜索请求,并在稍后检索结果。这对于需要处理大量数据或执行复杂查询的场景非常有用。

  • 概念:

    • 提交: 将搜索请求提交到 Elasticsearch。

    • 跟踪: 跟踪搜索请求的进度和状态。

    • 检索: 在搜索完成后检索结果。

  • 实践:

    1. 提交异步搜索请求:

      POST /my_index/_async_search { "size": 1000, "query": { "match_all": {} } }
    2. 获取异步搜索请求状态:

      GET /_async_search/{search_id}
    3. 获取异步搜索结果:

      GET /_async_search/{search_id}?wait_for_completion_timeout=1m
    4. 删除异步搜索请求:

      DELETE /_async_search/{search_id}
  • 图示:

总结:

Elasticsearch 提供了许多强大的高级特性,可以帮助你构建更高效、更灵活的搜索和分析解决方案。 跨集群复制、冻结层、向量搜索、脚本评分、索引生命周期管理和异步搜索只是其中的一部分。 通过深入理解和实践这些特性,你可以充分利用 Elasticsearch 的潜力,满足各种复杂的业务需求。


发布者: 作者: 转发
评论区 (0)
U