从MySQL到Elasticsearch:创建酒店索引案例

发布于:2024-08-14 ⋅ 阅读:(174) ⋅ 点赞:(0)

在现代的数据管理中,Elasticsearch(简称ES)因其强大的搜索功能和灵活的索引结构而受到广泛欢迎。本篇博客将介绍如何根据MySQL数据库中的酒店表定义,创建一个相应的Elasticsearch索引。

MySQL与Elasticsearch的对比

在开始之前,我们需要了解MySQL和Elasticsearch在数据存储和查询方面的不同:

  • MySQL 是一种关系型数据库管理系统,使用表、行和列来组织数据。
  • Elasticsearch 是一个基于Lucene的搜索引擎,提供全文搜索功能,并且能够快速处理大量数据。

酒店表的定义

首先,我们有一个MySQL表 tb_hotel,其定义如下:

CREATE TABLE `tb_hotel` (
  `id` bigint(20) NOT NULL COMMENT '酒店id',
  `name` varchar(255) NOT NULL COMMENT '酒店名称;例:7天酒店',
  `address` varchar(255) NOT NULL COMMENT '酒店地址;例:航头路',
  `price` int(10) NOT NULL COMMENT '酒店价格;例:329',
  `score` int(2) NOT NULL COMMENT '酒店评分;例:45,就是4.5分',
  `brand` nvarchar(32) NOT NULL COMMENT '酒店品牌;例:如家',
  `city` varchar(32) NOT NULL COMMENT '所在城市;例:上海',
  `star_name` varchar(16) DEFAULT NULL COMMENT '酒店星级',
  `business` varchar(255) DEFAULT NULL COMMENT '商圈;例:虹桥',
  `latitude` varchar(32) NOT NULL COMMENT '纬度',
  `longitude` varchar(32) NOT NULL COMMENT '经度',
  `pic` varchar(255) DEFAULT NULL COMMENT '酒店图片',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

创建Elasticsearch索引

根据MySQL表的定义,我们可以创建一个Elasticsearch索引,名为 hotel。以下是创建索引的JSON配置:

PUT /hotel
{
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "name": {
        "type": "text",
        "analyzer": "ik_max_word",
        "copy_to": "all"
      },
      "address": {
        "type": "keyword",
        "index": false
      },
      "price": {
        "type": "integer"
      },
      "score": {
        "type": "integer"
      },
      "brand": {
        "type": "keyword",
        "copy_to": "all"
      },
      "city": {
        "type": "keyword",
        "copy_to": "all"
      },
      "starName": {
        "type": "keyword"
      },
      "business": {
        "type": "keyword"
      },
      "location": {
        "type": "geo_point"
      },
      "pic": {
        "type": "keyword",
        "index": false
      },
      "all": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

索引字段说明

  • id:使用 keyword 类型,适合精确匹配。
  • namebrand:使用 text 类型,并指定 ik_max_word 分词器,同时复制到 all 字段以支持全文搜索。
  • addresspic:使用 keyword 类型,但 address 不参与索引,pic 不参与索引。
  • pricescore:使用 integer 类型,适合数值比较。
  • city:使用 keyword 类型,并复制到 all 字段。
  • starNamebusiness:使用 keyword 类型,适合分类和标签。
  • location:使用 geo_point 类型,支持地理位置搜索。

结论

通过以上步骤,我们成功地根据MySQL的酒店表定义创建了一个Elasticsearch索引。这将允许我们利用Elasticsearch的强大搜索能力,快速检索和分析酒店数据。记住,索引的创建和维护是一个持续的过程,需要根据实际业务需求不断调整和优化。


网站公告

今日签到

点亮在社区的每一天
去签到