电商搜索实战一 索引构建示例

索引定义思路

  1. 定义字段, 就是说有哪些字段需要保存到es中。
  2. 定义字段类型,哪些字段做分词,哪些字段做排序还有一些像地理信息等复杂类型的定义。
  3. 定义字段的分词器

创建索引

PUT /shop
{
  "settings": {
    "number_of_shards": 1, 
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "id":{ "type": "integer"},
      "name":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},
      "tags":{"type": "text","analyzer": "whitespace","fielddata": true},
      "location":{"type": "geo_point"},
      "remark_score":{"type": "double"},
      "price_per_man":{"type": "integer"},
      "category_id": {"type": "integer"},
      "category_name":{ "type": "keyword"},
      "seller_id":{"type":"integer"},
      "seller_remark_score":{"type": "double"},
      "seller_disabled_flag":{"type": "integer"}
      
    }
  }
}

索引解释

  1. “name”:{“type”: “text”,“analyzer”: “ik_max_word”,“search_analyzer”: “ik_smart”},
    店铺名称

  2. “tags”:{“type”: “text”,“analyzer”: “whitespace”,“fielddata”: true}, 标签: 如环境好, 帅哥多, 等
    fielddata: true 意思为聚合操作, 这里是为了可以让es支持聚合统计.
    “analyzer”: “whitespace” 按照空格分词

  3. “type”: “geo_point”: 意思为基于地理信息的分词

  4. “remark_score”:{“type”: “double”} 是门店评分字段,这里使用double 类型比较合适.用于排序的字段.

  5. “price_per_man”:{“type”: “integer”} 人均价格字段,可以排序, 可以取最高,最低等等操作.

  6. “category_id”: {“type”: “integer”}, “category_name”:{ “type”: “keyword”}
    keyWord 存储字段串,不会分词,会将整个字段做一个token保存到索引中.

  7. “seller_id”:{“type”:“integer”}, “seller_remark_score”:{“type”: “double”}, “seller_disabled_flag”:{“type”:“integer”} 商家的一些信息, 商家有可能是会有多个门店的. 商家的评分也会在搜索排序中占一定的比例

构建索引内容

logstash-input-jdbc 也是一个es的插件. 要使用logstash服务. 它的作用就是将mysql和es的建立一个通道,实现一个全量索引构建。

在官网下载一个logstash就可开始搞 了。

  1. 插件安装
    我这里是在windows下安装的,因此需要执行.bat结尾的。 如果是linux 就不用执行.bat结尾的了。
 bin/logstash-plugin.bat install logstash-input-jdbc

如果使用es 7.8.1 版本的会出现在这里插入图片描述
表示功能已经被支持了。就不需要在安装了。

  1. 准备mysql的驱动包

这里就将mysql的驱动包到bin目录下了。
在这里插入图片描述

  1. 编写导入从mysql导入 es的规则和sql
input {
    jdbc {
      # 设置timezone
	jdbc_default_timezone => "Asia/Shanghai"
      # mysql 数据库链接,dianpingdb为数据库名
      jdbc_connection_string => "jdbc:mysql://39.100.114.219:3306/dianpingdb"
      # 用户名和密码
      jdbc_user => "root"
      jdbc_password => "Root!!2018"
      # 驱动
      jdbc_driver_library => "/usr/local/elasticsearch/logstash-7.8.1/bin/mysql/mysql-connector-java-5.1.48.jar"
      # 驱动类名
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      last_run_metadata_path => "/usr/local/elasticsearch/logstash-7.8.1/bin/mysql/last_value_meta"
    # 执行的sql 文件路径+名称
      statement_filepath => "/usr/local/elasticsearch/logstash-7.8.1/bin/mysql/jdbc.sql"
      # 设置监听间隔  各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
    }
}




output {
    elasticsearch {
      # ES的IP地址及端口
        hosts => ["www.budongfeng.com:9201"]
      # 索引名称
        index => "shop"
  	document_type => "_doc"
      # 自增ID 需要关联的数据库中有有一个id字段,对应索引的id号
        document_id => "%{id}"
    }
    stdout {
     # JSON格式输出
        codec => json_lines
    }
}


这里将文件上传至附件中。

  1. 运行logstash
    运行logstash的同时要指定使用哪个配置文件
 ./logstash -f mysql/jdbc.conf 
  1. 查看索引 就已经有值了。

交个朋友

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值