Elasticsearch 是一个开源的分布式搜索引擎,它使用 JSON 文档来存储数据,并提供强大的全文搜索、实时分析和可视化功能。Elasticsearch 构建在 Apache Lucene 基础之上,提供了简单的 RESTful API 以及丰富的查询语言。适用于大数据,数据检索。
项目中考虑到文章的数据量只会越来越大,由于在大数据量的情况下,使用mysql的模糊查询的耗时十分巨大,如果给mysql中添加索引这又会带来新的开销,为此采用ES来搜索文章。首先则需要将MySQL的数据和ES的数据进行同步,采用Lostash工具就可以实现同步数据,kibana的作用是提供一个可视化的界面,方便开发人员搜索数据。同步完成之后,需要只需要集成Spring-data-elasticsearch,根据其api接口就可以实现按照文章标题和文章内容模糊查询,并实现了将关键字高亮展示(高亮展示是由前端来完成的,具体的思路为:前端通过搜索框拿到用户搜索的关键词,然后使用正则表达式匹配后端返回数据中的关键字,匹配之后将其样式改为红色标亮展示)。
要拿数据说话为什么在大数量的情况下ES的搜索耗时要低于MySQL的搜索耗时?为此,自己写程序随机生成了100、1000、10000、100000、600000条数据来进行对比,对比结果如上图所示,得出结论:在数据量大于100000的时候,ES的搜索耗时已经优于MySQL了,数据量越大时,差距更加明显。
^
- 全文搜索:ElasticSearch提供了强大的全文搜索能力,包括模糊查询、高级查询语法、多字段搜索等,而MySQL在这方面相对较弱。
- 处理大数据:ElasticSearch在处理大数据量时的性能优于MySQL,特别是在数据量快速增长的情况下,ElasticSearch可以更好地扩展和维护。
- 实时分析:ElasticSearch能够实时索引和搜索数据,适合实时数据分析和监控,而MySQL在这方面通常需要额外的工作和优化。
- 复杂数据结构:ElasticSearch可以存储和查询复杂的数据结构,如嵌套对象和数组,而MySQL则需要复杂的表设计和关联查询。
总结来说,ElasticSearch和MySQL各有优势和适用场景。在需要快速、复杂、全文搜索的场景下,ElasticSearch是更好的选择。而在需要强事务支持、数据一致性的场景下,MySQL可能更为合适。在实际应用中,很多系统会同时使用ElasticSearch和MySQL,将两者的优势结合起来,以达到最佳的性能和效果。
以下是 ElasticSearch 的使用教程大致步骤:
-
安装 Elasticsearch:
- 从 Elasticsearch 官方网站 下载适合你系统的版本。
- 安装 Elasticsearch。
-
启动 Elasticsearch:
- 启动 Elasticsearch 服务。你可以通过命令行或者服务管理工具来启动。
-
使用 RESTful API:
- Elasticsearch 提供了 RESTful API,你可以使用 curl 或其他 HTTP 客户端来与 Elasticsearch 通信。
- 默认情况下,Elasticsearch 会在
http://localhost:9200
上运行。
-
创建索引:
- 在 Elasticsearch 中,你需要先创建一个索引,类似于关系数据库中的数据库。
- 通过 RESTful API 发送 PUT 请求来创建索引。
curl -X PUT "http://localhost:9200/myindex"
-
添加文档:
- 添加文档到索引中。文档是以 JSON 格式存储的数据。
- 通过 RESTful API 发送 POST 请求来添加文档。
curl -X POST "http://localhost:9200/myindex/_doc/1" -H 'Content-Type: application/json' -d '{"field1": "value1", "field2": "value2"}'
-
执行查询:
- 使用 Elasticsearch 查询语言执行搜索操作。
- 通过 RESTful API 发送 GET 请求来执行查询。
curl -X GET "http://localhost:9200/myindex/_search?q=field1:value1"
-
可视化和分析:
- 使用 Kibana 等工具可视化和分析 Elasticsearch 中的数据。
请注意,以上只是一个简单的入门教程。Elasticsearch 还有许多高级功能和配置选项,你可以根据实际需求深入学习。此外,使用 Elasticsearch 时,安全性也是一个需要注意的方面。阅读 Elasticsearch 官方文档 可以获取更详细的信息和教程。