第六课 实战go语言改造php仿优酷-ES改造优化接口
tags:
- Beego
- 慕课网
categories:
- Elasticsearch
文章目录
第一节 Elasticsearch介绍
1.1 什么是Elasticsearch ?
- 它是全文搜索引擎,是目前搜索引擎的首选。
- 不仅仅可以做搜索引擎,可以做数据存储,每个字段都可以检索。
- 维基百科、github等都在使用它。
1.2 Elasticsearch特点
- 快速
- 灵活
- 稳定
- 简单
- 注意: 准实时(有不到1S的延时)
1.3 Elasticsearch核心概念
- 集群
- 节点
- 分片
- 文档
- 副本


1.4 全文检索和分词
- 内容提前索引并分词保存
- 查询关键字分词,有一个相同时就会被检索出来
- 分词库和屏蔽词库
第二节 Elasticsearch的基本封装
2.1 ES基本操作
- 创建索引、创建字段,注意:字段不可删除和修改。
- 添加、修改、删除、列表,采用API调用实现。
- 搜索功能封装,并实现搜索功能
- 添加和修改功能封装
- 删除功能封装
2.2 搜索ES封装
package es
import (
"encoding/json"
"fmt"
"github.com/astaxie/beego/httplib"
)
var esUrl string
func init() {
esUrl = "http://127.0.0.1:9200/"
}
// 搜索ES 索引名 搜索条件 开始位置 获取条数 sort第一个key 根据那个字段排序 正序还是倒序
func EsSearch(indexName string, query map[string]interface{
}, from int, size int, sort []map[string]string) HitsData {
searchQuery := map[string]interface{
}{
"query": query,
"from": from,
"size": size,
"sort": sort,
}
req := httplib.Post(esUrl + indexName + "/_search")
req.JSONBody(searchQuery)
str, err := req.String()
fmt.Println(str)
if err != nil {
fmt.Println(err)
}
var stb ReqSearchData
err = json.Unmarshal([]byte(str), &stb)
return stb.Hits
}
//解析获取到的值
type ReqSearchData struct {
Hits HitsData `json:"hits"`
}
type HitsData struct {
Total TotalData `json:"total"`
Hits []HitsTwoData `json:"hits"`
}
type HitsTwoData struct {
Source json.RawMessage `json:"_source"`
}
type TotalData struct {
Value int
Relation string
}
2.3 添加修改删除
//添加 索引值 添加数据的id 内容
func EsAdd(indexName string, id string, body map[string]interface{
}) bool {
// 因为新版本type取消了 所以要用_doc
req := httplib.Post(esUrl + indexName + "/_doc/" + id)
req.JSONBody(body)
str, err := req.String()
if err != nil {
fmt.Println(err)
}
fmt.Println(str)
return true
}
//修改 索引值 修改数据的id 内容
func EsEdit(indexName string, id string, body map[string]interface{
}) bool {
// 这里有个坑 要把修改的内容放到doc中要不会报错
bodyData := map[string]interface{
}{
"doc": body,
}
req := httplib.Post(esUrl + indexName + "/_doc/" + id + "/_update")
req.JSONBody(bodyData)
str, err := req.String()
if err != nil {
fmt.Println(err)
}
fmt.Println(str)
return true
}
//删除ES
func EsDelete(indexName string, id string) bool {
req := httplib.Delete

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



