通过Kibana进行数据检索

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文以“某金融服务企业使用阿里云Elasticsearch(简称ES)为用户提供理财产品的搜索功能”场景为例,为您介绍如何使用阿里云ES搭建集群并完成索引创建、数据搜索等操作。

操作须知

  • 数据说明:示例该企业的理财产品信息如下。

    数据示例

    {
        "products": [
            {
                "productName": "理财产品A",
                "annual_rate": "3.2200%",
                "describe": "180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"
            },
            {
                "productName": "理财产品B",
                "annual_rate": "3.1100%",
                "describe": "90天定投产品,最低10000起投,每天收益到账消息推送"
            },
            {
                "productName": "理财产品C",
                "annual_rate": "3.3500%",
                "describe": "270天定投产品,最低40000起投,每天收益立即到账消息推送"
            },
            {
                "productName": "理财产品D",
                "annual_rate": "3.1200%",
                "describe": "90天定投产品,最低12000起投,每天收益到账消息推送"
            },
            {
                "productName": "理财产品E",
                "annual_rate": "3.0100%",
                "describe": "30天定投产品推荐,最低8000起投,每天收益会消息推送"
            },
            {
                "productName": "理财产品F",
                "annual_rate": "2.7500%",
                "describe": "热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"
            }
        ]
    }
  • 版本说明:阿里云ES支持多个版本,不同版本的功能存在差异。本文以8.17版本进行案例演示。

  • 费用说明:本文示例创建按量付费实例,会根据实际的资源使用量收取相应费用。完成本文案例,预计花费不超过20元。

  • Kibana:是灵活的数据分析及可视化工具,在Kibana中,您可搜索及查看ES索引中的数据,并进行交互。

  • Restful API:可通过HTTP协议与ES集群进行交互。本文的索引创建、数据插入及搜索、索引删除等相关操作均使用Restful API实现。

前提条件

创建专有网络VPC和虚拟交换机vSwitch。您可通过VPCvSwitch保障ES实例的网络安全、与其他资源互通、实现高可用。

说明

创建ES实例时需选择合适的VPCvSwitch。VPC、vSwitch需要与ES实例同地域、同可用区,并且实例创建成功后不可更改。

本文示例VPCvSwitch的核心参数配置如下。

类别

配置示例

VPC

  • 地域:华东1(杭州)

  • IPv4网段:选择手动输入,网段为172.16.0.0/16

vSwitch

可用区:杭州可用区I。

操作流程

使用阿里云ES搭建集群并完成数据搜索的相关操作流程如下。

image
  1. 创建实例:阿里云ES实例是一个托管式的ES服务,提供了一个易于使用、可扩展且稳定的搜索引擎平台。我们所要执行的数据存储、搜索与分析等所有操作均需在实例中完成。

  2. 访问实例:通过Kibana访问实例,后续会基于Kibana完成实例的索引创建、文档创建、数据插入及搜索等操作。

  3. 创建索引:用于后续存储本文示例的理财产品信息,并定义该信息中各个字段的搜索类型及分词方式。

    说明

    索引是ES用于存储相关文档的逻辑容器,可帮助您组织和管理数据,显著提升查询效率。

  4. 创建文档并插入数据:将本文示例的理财产品信息以文档形式插入至上一步创建的索引中,以便后续查询。

  5. 搜索数据:可通过全文搜索、按条件搜索等方式查询所需产品。

  6. (可选)后续步骤:可按需执行测试索引删除、数据迁移、集群扩容或实例释放等操作。

步骤一:创建实例

  1. 进入实例创建页面

  2. 配置实例信息。

    按如下表格配置实例信息。

    说明

    未提及的参数保持默认配置。更多创建实例的参数介绍,请参见创建阿里云Elasticsearch实例

    参数

    描述

    商品类型

    选择按量付费

    地域和可用区

    选择华东1(杭州)可用区I

    可用区数量

    选择单可用区

    专有网络及虚拟交换机

    选择您在前提条件中创建的VPCvSwitch。

    实例类型及版本

    选择向量增强版8.17.0版本。

    实例名称

    配置为ES_test

    登录名及登录密码

    登录名默认为elastic,且不可更改;登录密码自定义。

  3. 单击立即购买,按照界面指引完成支付。支付完成后,实例开始创建。

    说明

    创建过程预计耗时20分钟左右,请耐心等待。

  4. 查看实例状态。

    1. 进入阿里云Elasticsearch控制台

    2. 在顶部菜单栏选择华东1(杭州)地域,单击左侧导航栏的Elasticsearch实例,即可在实例列表中查看所创建实例的状态。

      当实例状态显示正常,表示实例创建成功,您可继续执行下述步骤。

步骤二:访问实例

  1. 进入可视化控制。

    1. Elasticsearch实例列表单击目标实例ID。

    2. 在左侧导航栏单击配置与管理 > 可视化控制

  2. 配置Kibana白名单。

    本文示例通过公网访问Kibana。为避免访问受限,需将您客户端的IP地址加入Kibana的公网访问白名单。

    说明

    更多访问Kibana的网络配置及常见问题,请参见配置Kibana公网或私网

    1. Kibana区域,单击修改配置

    2. 单击Kibana公网访问白名单后的修改,按照界面指引,将您客户端的IP地址加入白名单。

  3. 进入Kibana开发工具。

    通过Kibana的开发工具可访问ES实例,完成实例的索引创建、文档创建、数据插入及搜索等操作。

    1. 返回可视化控制页面,单击Kibana区域的公网入口

    2. 输入用户名及密码,单击登录

      说明

      用户名为elastic,密码为您在步骤一中自定义的密码。

    3. 在欢迎页单击自己浏览

    4. 在左上角单击image图标,选择Management > 开发工具,进入开发工具控制台。

  4. 测试访问结果。

    在控制台页签执行GET /命令,访问ES实例。出现如下结果,表示访问成功。image

步骤三:创建索引

创建索引product_info,并配置对productNamedescribe字段进行全文搜索及粗粒度分词,对annual_rate字段进行精确匹配,示例代码如下。

PUT /product_info
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
      "properties": {
        "productName": {
          "type": "text",
          "analyzer": "ik_smart"
        },
        "annual_rate":{
          "type":"keyword"
        },
        "describe": {
          "type": "text",
          "analyzer": "ik_smart"
        }
    }
  }
}

核心参数说明如下。

类别

参数及描述

settings(配置索引)

定义主分片及主分片副本的数量。

  • number_of_shards:主分片数量,用于水平扩展数据存储和查询负载。

  • number_of_replicas:每个主分片的副本数量,用于提高容错性和读取性能。

mappings(定义字段映射)

定义对理财产品信息中productNameannual_ratedescribe字段的搜索类型及分词方式。

  • type:定义字段的数据类型及搜索方式。

    • 配置为text:表示相关字段会被全文搜索,并且支持分词及模糊匹配。

    • 配置为keyword:表示相关字段会精确匹配,不会进行分词。

  • analyzer:定义字段的分词方式。本文示例使用中文分词插件analysis-ik进行粗粒度分词。

返回如下结果,表示索引创建成功。image

步骤四:创建文档并插入数据

使用_bulkAPI,批量向product_info索引插入多条文档,每条文档的内容为理财产品信息的相关数据(包含理财产品的名称、年化利率、描述字段)。示例代码如下。

说明

{"index":{}}表示插入一条新文档,ES会自动为该文档生成一个唯一ID。

POST /product_info/_bulk
{"index":{}}
{"productName":"理财产品A","annual_rate":"3.2200%","describe":"180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"}
{"index":{}}
{"productName":"理财产品B","annual_rate":"3.1100%","describe":"90天定投产品,最低10000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"理财产品C","annual_rate":"3.3500%","describe":"270天定投产品,最低40000起投,每天收益立即到账消息推送"}
{"index":{}}
{"productName":"理财产品D","annual_rate":"3.1200%","describe":"90天定投产品,最低12000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"理财产品E","annual_rate":"3.0100%","describe":"30天定投产品推荐,最低8000起投,每天收益会消息推送"}
{"index":{}}
{"productName":"理财产品F","annual_rate":"2.7500%","describe":"热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"}

返回结果中包含"errors": false,表示数据插入成功。image

步骤五:搜索数据

场景一:全文搜索

示例使用match查询,对describe字段执行关键字匹配,搜索product_info索引中描述内容包含每天收益到账消息推送的所有产品,代码如下。

GET /product_info/_search
{
  "query": {
    "match": {
      "describe": "每天收益到账消息推送"
    }
  }
}

核心参数说明如下。

参数

描述

query

定义查询条件。

match

对输入内容会进行分词。

describe

要查询的字段,即描述内容。在product_info索引中,describe字段被定义为text类型,采用analysis-ik分词器进行粗粒度分词,即对该字段的查询会采取全文匹配并进行分词。

返回结果如下。

说明
  • 阿里云ES支持通过分词器处理文本数据后,进行数据搜索并进行评分排序。在返回结果中,越靠前的搜索结果匹配度及分数越高。

  • 该查询将返回所有描述字段中包含与关键词文本相关的文档。由于采用全文搜索机制,即使描述中部分词语顺序变化或省略,ES仍能根据相关性进行匹配。

{
  "took": 27,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 6,
      "relation": "eq"
    },
    "max_score": 1.7260926,
    "hits": [
      {
        "_index": "product_info",
        "_id": "MXS855cBfq0GQy5BxZ0m",
        "_score": 1.7260926,
        "_source": {
          "productName": "理财产品C",
          "annual_rate": "3.3500%",
          "describe": "270天定投产品,最低40000起投,每天收益立即到账消息推送"
        }
      },
      {
        "_index": "product_info",
        "_id": "MnS855cBfq0GQy5BxZ0m",
        "_score": 1.7260926,
        "_source": {
          "productName": "理财产品D",
          "annual_rate": "3.1200%",
          "describe": "90天定投产品,最低12000起投,每天收益到账消息推送"
        }
      },
      {
        "_index": "product_info",
        "_id": "MHS855cBfq0GQy5BxZ0m",
        "_score": 1.7260926,
        "_source": {
          "productName": "理财产品B",
          "annual_rate": "3.1100%",
          "describe": "90天定投产品,最低10000起投,每天收益到账消息推送"
        }
      },
      {
        "_index": "product_info",
        "_id": "M3S855cBfq0GQy5BxZ0m",
        "_score": 1.1507283,
        "_source": {
          "productName": "理财产品E",
          "annual_rate": "3.0100%",
          "describe": "30天定投产品推荐,最低8000起投,每天收益会消息推送"
        }
      },
      {
        "_index": "product_info",
        "_id": "L3S855cBfq0GQy5BxZ0m",
        "_score": 1.1325164,
        "_source": {
          "productName": "理财产品A",
          "annual_rate": "3.2200%",
          "describe": "180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"
        }
      },
      {
        "_index": "product_info",
        "_id": "NHS855cBfq0GQy5BxZ0m",
        "_score": 0.3420724,
        "_source": {
          "productName": "理财产品F",
          "annual_rate": "2.7500%",
          "describe": "热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"
        }
      }
    ]
  }
}

场景二:按条件搜索

示例使用range查询,在 product_info 索引中搜索年化率在3.0000%~3.1300%之间的产品,代码如下。

GET /product_info/_search
{
  "query": {
    "range": {
      "annual_rate": {
        "gte": "3.0000%",
        "lte": "3.1300%"
      }
    }
  }
}

核心参数说明如下。

参数

描述

query

定义查询条件。

range

表示范围查询。

annual_rate

要查询的字段,即年化率。在product_info索引中,annual_rate字段被定义为keyword类型,即对该字段的查询会采取精确匹配。

gte

取值范围,大于等于。

lte

取值范围,小于等于。

返回结果如下。

{
  "took": 27,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 3,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "product_info",
        "_id": "M3S855cBfq0GQy5BxZ0m",
        "_score": 1,
        "_source": {
          "productName": "理财产品E",
          "annual_rate": "3.0100%",
          "describe": "30天定投产品推荐,最低8000起投,每天收益会消息推送"
        }
      },
      {
        "_index": "product_info",
        "_id": "MnS855cBfq0GQy5BxZ0m",
        "_score": 1,
        "_source": {
          "productName": "理财产品D",
          "annual_rate": "3.1200%",
          "describe": "90天定投产品,最低12000起投,每天收益到账消息推送"
        }
      },
      {
        "_index": "product_info",
        "_id": "MHS855cBfq0GQy5BxZ0m",
        "_score": 1,
        "_source": {
          "productName": "理财产品B",
          "annual_rate": "3.1100%",
          "describe": "90天定投产品,最低10000起投,每天收益到账消息推送"
        }
      }
    ]
  }
}

(可选)后续步骤

删除索引

执行如下代码,删除本文创建的测试索引。

DELETE /product_info

返回结果如下。image

迁移数据及扩容集群

  • 数据迁移:您可将您的业务数据迁移至阿里云ES,使用阿里云ES进行后续的查询分析操作。

  • 集群扩容:若当前集群配置无法满足您的业务负载和性能需求,可按需进行扩容。

释放实例

ES实例后续无需使用,请及时释放,避免浪费资源并产生额外费用。

警告

实例释放后,数据无法恢复,请谨慎操作,建议释放实例前先备份数据。实例释放后将停止计费。

相关文档