ES的介绍:
Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。
ES的基本概念:
1.当你经营一家网上商店,你可以让你的客户搜索你卖的商品。在这种情况下,你可以使用ElasticSearch来存储你的整个产品目录和库存信息,为客户提供精准搜索,可以为客户推荐相关商品。
2.当你想收集日志或者交易数据的时候,需要分析和挖掘这些数据,寻找趋势,进行统计,总结,或发现异常。在这种情况下,你可以使用Logstash或者其他工具来进行收集数据,当这引起数据存储到ElasticsSearch中。你可以搜索和汇总这些数据,找到任何你感兴趣的信息。
3.对于程序员来说,比较有名的案例是GitHub,GitHub的搜索是基于ElasticSearch构建的,在github.com/search页面,你可以搜索项目、用户、issue、pull request,还有代码。共有40~50个索引库,分别用于索引网站需要跟踪的各种数据。虽然只索引项目的主分支(master),但这个数据量依然巨大,包括20亿个索引文档,30TB的索引文件
ES基本概念与关系型数据库的比较:
ES的安装配置参考链接
(建议装7.2.1版本)
ES的启用:打开bin目录下的elasticsearch.bat
ES默认端口为:127.0.0.1:9200
配置成功时
查看健康状态
curl -X GET 127.0.0.1:9200/_cat/health?v
查询当前ES集群中所有的indices
curl -X GET 127.0.0.1:9200/_cat/indices?v
创建索引
curl -X PUT 127.0.0.1:9200/student //创建student的库
插入记录
curl -H "ContentType:application/json" -X POST 127.0.0.1:9200/user/person -d '
{
"name": "dsb",
"age": 9000,
"married": true
}'
//向user数据库发送一个person类型的json数据
检索
curl -X GET 127.0.0.1:9200/user/person/_search
ES插入实例
package main
//ES domo
import (
"context"
"fmt"
"github.com/olivere/elastic/v7"
)
//Student ...
type Student struct {
Name string `json:"name"`
Age int `json:"age"`
Married bool `json:"married"`
}
func (s *Student) run() {
fmt.Printf("%s在跑...", s.Name)
}
func (s *Student) wang() {
fmt.Printf("%s在汪...", s.Name)
}
func main() {
//1.初始化连接,得到一个client
client, err := elastic.NewClient(elastic.SetURL("http://127.0.0.1:9200"))
if err != nil {
panic(err)
}
fmt.Println("connect to es success")
p1 := Student{Name: "Rion", Age: 22, Married: false}
//链式操作
put1, err := client.Index().
Index("Student"). //Index表数据库
Type("go"). //Type是表
BodyJson(p1). //把一个go语言的对象转换为json格式
Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("Indexed Student %s to index %s,type %s\n", put1.Id, put1.Index, put1.Type)
}