分布式搜索解决方案-笔记

分布式全文搜索解决方案

1.解决方案介绍

ElasticSearch是一个基于RESTful web接口的分布式全文搜索引擎。

本解决方案是基于Mysql数据库 、 Hadoop生态(可选)、 ElasticSearch搜索引擎三大数据系统实现一个分布式全文搜索系统。

主要包括数据接入、数据索引和全文搜索3个模块。适用于各种项目的各种搜索场景。

1.1 三大数据系统

1.1.1 关系型数据库

用于对商品,用户等各种数据进行结构化存储。 关系型数据库对于事务性非常高的OLTP1操作(比如订单,结算等)支持良好。

主选:mysql数据库

1.1.2 hadoop生态

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供存储,而MapReduce则为海量的数据提供计算。

hadoop是数据仓库主要的载体,除了备份关系型数据库的所有版本,还存储用户行为,点击,曝光,互动等海量日志数据,hadoop对于数据分析,数据挖掘等OLAP2操作支持比关系型数据库更加具有扩展性和稳定性。

Hive,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能。

HBase,Hadoop的一个子项目,是一个分布式的、面向列的开源数据库。

Spark,专为大规模数据处理而设计的快速通用的计算引擎,可以在 Hadoop 文件系统中并行运行,作为对 Hadoop 的补充。

1.1.3 搜索引擎

以elasticsearch和solr为代表。搜索引擎是获取信息最高效的途径,几乎成为各类网站,应用的基础标配设施(地位仅次于数据库)。

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

1.2 基于ES的分布式搜索技术架构

请添加图片描述

2.软件安装

2.1 安装JDK

ElasticSearch是用JAVA语言开发的,其运行需要安装JDK。

JDK (Java Development Kit) ,是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。

2.1.1 下载安装JDK

下载地址https://www.oracle.com/technetwork/java/javase/downloads/index.html
请添加图片描述
请添加图片描述

安装:双击 软件 打开安装界面

点击下一步 进入选择安装目录界面
在这里插入图片描述
点击更改 自定义安装目录
在这里插入图片描述

点击 下一步 进行安装
在这里插入图片描述

等待,出现以下界面,则安装完成,点击关闭即可。
在这里插入图片描述

2.1.2 配置环境变量

配置 JAVA_HOME环境变量
在这里插入图片描述
配置Path环境变量
在这里插入图片描述

2.1.3 测试-查看JDK版本

打开命令行窗口,输入java -version查看JDK版本
在这里插入图片描述
出现以上界面,说明安装成功。

2.2 安装Elasticsearch

权威指南https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

2.2.1 下载安装

下载地址https://www.elastic.co/downloads
在这里插入图片描述
在这里插入图片描述

解压
在这里插入图片描述

2.2.2 配置Path环境变量

(bin目录)
在这里插入图片描述

2.2.3 启动elasticsearch

打开命令行窗口 执行命令 elasticsearch -d 启动elasticsearch
在这里插入图片描述
注:该命令行窗口 不要关闭。

浏览器打开 http://localhost:9200

出现以上界面,则启动成功。

2.2.4 目录解读

  • bin:启动文件

  • config:配置文件

    • log4j2.properties:日志配置文件
    • jvm.options:java虚拟机的配置
    • elasticsearch.yml:es的配置文件
  • data:索引数据目录

  • lib:相关类库Jar包

  • logs:日志目录

  • modules:功能模块

  • plugins:插件

2.2.5(选装)安装Elasticsearch-Head

elasticsearch-head是一个用于浏览ElasticSearch集群并与其进行交互的Web项目

GitHub托管地址:https://github.com/mobz/elasticsearch-head

下载并解压:

安装:打开命令行,切换到Elasticsearch-Head目录,执行以下命令

npm install

启动:打开命令行,切换到Elasticsearch-Head目录,执行以下命令

npm run start

启动成功后,可通过http://localhost:9100进行访问

由于跨域(Elasticsearch位于9200端口),需要添加配置: E:\elasticsearch-7.1.0\config\elasticsearch.yml中

#新添加的配置行
http.cors.enabled: true
http.cors.allow-origin: "*"

重新启动

访问效果:

2.3 安装Elasticsearch-php

https://github.com/elastic/elasticsearch-php

使用composer安装:

在项目目录下,执行以下命令

composer require elasticsearch/elasticsearch

2.4 配置php.ini

配置php.ini的sys_temp_dir

否则,使用过程中可能会出现以下报错

3.ElasticSearch基本使用

3.1 基本概念

3.1.1 节点与集群

Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。

单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。

3.1.2 索引

在Elasticsearch中存储数据的行为就叫做索引(indexing)

在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于**索引(index)**中

类比传统关系型数据库:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields

Elasticsearch集群可以包含多个索引(indices)(数据库)

每一个索引可以包含多个类型(types)(表)

每一个类型包含多个文档(documents)(行)

然后每个文档包含多个字段(Fields)(列)。

3.2 基本使用

3.2.1 创建索引
$es = \Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
$params = [
    'index' => 'test_index'
];
$r = $es->indices()->create($params);
dump($r);die;

预期结果:

array(3) {
  ["acknowledged"] => bool(true)
  ["shards_acknowledged"] => bool(true)
  ["index"] => string(10) "test_index"
}
3.2.2 添加文档(索引文档)
$es = \Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
$params = [
    'index' => 'test_index',
    'type' => 'test_type',
    'id' => 100,
    'body' => ['id'=>100, 'title'=>'PHP从入门到精通', 'author' => '张三']
];

$r = $es->index($params);
dump($r);die;

预期结果:

array(8) {
  ["_index"] => string(10) "test_index"
  ["_type"] => string(9) "test_type"
  ["_id"] => string(3) "100"
  ["_version"] => int(1)
  ["result"] => string(7) "created"
  ["_shards"] => array(3) {
    ["total"] => int(2)
    ["successful"] => int(1)
    ["failed"] => int(0)
  }
  ["_seq_no"] => int(0)
  ["_primary_term"] => int(1)
}
3.2.3 修改文档
$es = \Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
$params = [
    'index' => 'test_index',
    'type' => 'test_type',
    'id' => 100,
    'body' => [
        'doc' => ['id'=>100, 'title'=>'ES从入门到精通', 'author' => '张三']
    ]
];

$r = $es-
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值