ElasticSearch是什么?

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

简单来说就是用来做网站/APP搜索功能

mac下环境安装

brew install elasticsearch

还需要安装logstash和mysql-connector用于同步mysql数据

brew install logstash
mysql-connector 在phpstorm目录下就会有这个文件

/Users/wcc/Library/Preferences/PhpStorm2018.1/jdbc-drivers/MySQL Connector/J/5.1.46/mysql-connector-java-5.1.46.ja

所以这里我就不安装了,需要安装的自行搜索

安装logstash之后进入logstash的bin目录执行

logstash-plugin install logstash-input-jdbc

搜索

curl -XGET 'http://localhost:9200/request_log/_search?pretty&q=source:WWW'使用ElasticSearch配置同步规则

在bin目录下新增request_mysql.conf

input { jdbc { jdbc_driver_library => "/Users/wcc/Library/Preferences/PhpStorm2018.1/jdbc-drivers/MySQL Connector/J/5.1.46/mysql-connector-java-5.1.46.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&useSSL=false" jdbc_user => "root" jdbc_password => "root" statement => "SELECT * FROM pre_request_logs_20180524 where update_time > :sql_last_value" jdbc_paging_enabled => "true" jdbc_page_size => "50000" schedule => "* * * * *" }}filter { json { source => "message" remove_field => ["message"] }}output { stdout { codec => rubydebug } elasticsearch { hosts => "localhost" index => "request_log" }}

注意statement对于的sql语句就是要同步数据时执行的sql
update_time > :sql_last_value代表每次同步新增的数据,只有就不会导出重复同步数据

执行配置文件

logstash -f request_mysql.conf

每隔一分钟就会执行一次sql用来同步数据

查看所有索引

curl 'localhost:9200/_cat/indices?v'在PHP中使用下载elasticsearch的php扩展

composer.json文件中新增

{ "require": { "elasticsearch/elasticsearch": "~6.0", "monolog/monolog": "~1.0" }}

composer update

文件目录如下

先试试搜索功能搜索source=WEB的所有行

use Elasticsearch\ClientBuilder;require '../vendor/autoload.php';$client = ClientBuilder::create() ->build();$params = [ 'index' => 'request_log', 'body' => [ 'query' => [ 'match' => [ 'source' => 'WEB' ] ] ]];$response = $client->search($params);print_r($response);

total:搜索到的行数
hits:搜索到数据的具体内容