### 检索引擎 工作原理,计算机索引程序通过扫描文章中的每一个词,对每一个词简历一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就 根据事先简历的索引进行查找,并讲查找的结果反馈给用户的检索方式 使用这种检索方式的软件或者引擎,叫全文检索引擎 ElasticSearch就是其中一个 ### ElasticSearch介绍 * 基于Lucene实现其核心和搜索功能 * 分布式的实时文件存储,每个字段都被索引可被搜索 * 分布式的实时分析搜索引擎 * 可以扩展到上百台服务器,处理PB级结构化或非结构化数据 * 所有功能集成在一个服务里面,可以通过RRSTful API,各种语言客户端,甚至命令行与之交互 * 上手容易,提供很多合理的缺省值,开箱即用,学习成本低 * 免费下载,使用和修改 * 配置灵活 ### 安装 #### ElasticSearch安装 * 使用docker安装 * https://hub.docker.com/_/elasticsearch * https://www.elastic.co/guide/en/elasticsearch/reference/6.7/docker.html * 官网安装 https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-install.html #### 安装插件 * 中文的分词组件 ik插件(很重要) * 集群监控插件及其他 ### 使用 #### 分词组件介绍 es默认分词组件 standard 安装了ik插件,可以选择ik中文分词组件 #### 创建索引 * 文档地址 https://www.elastic.co/guide/en/elasticsearch/reference/7.1/indices.html * 创建索引命令 如下将创建一个以com_shop的索引,配置文件在config.json里面 ``` curl -XPUT "es服务器地址"/com_shop -d '@config.json' ``` * com_shop 索引名称 * config.json是创建索引的配置文件 * config.json 的内容 ```json "settings" : { "number_of_shards" : 1 }, "mappings" : { "properties" : { "field1" : { "type" : "text" } } } ``` #### 往索引添加数据(文档) * 文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.1/docs.html * 往索引里面添加文档命令如下(以下示例将JSON文档插入ID为1的“com_shop”索引中:) ``` shell curl -XPUT "es服务器地址"/com_shop/1 -d '@config.json' { "user" : "kimchy", "post_date" : "2009-11-15T14:12:12", "message" : "trying out Elasticsearch" } ``` #### 搜索索引 * 文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.1/search.html * 可以做到高亮 ### 实战 ####思路: * 将数据库数据导入到elasticsearch * 搜索功能直接对elasticsearch 进行搜索 * 后台数据进行修改,也可以对elasticsearch进行同步 #### mysql和es的数据同步的工具 elasticsearch-jdbc * 概念:将数据库的数据导入到es里面 * 文件包含计划任务 * es-jdbc需要配置 mysql 和 es的服务地址之类的 #### 将myslq数据批量导入到es里面去 使用elasticsearch-jdbc #### yii2 安装elasticsearch * 利用composer安装yii-elasticsearch * 继承yii-elasticsearch 的model类就可以像查询数据库一样查询es数据 #### 关于数据库更新和插入,ES还是老数据 * 在对数据进行增加修改时,执行一个事件,更改到es(不包括删除) * 用elasticsearch-jdbc定时事件,查询改动的数据,自动更新到es(不包括删除)