第六课 实战go语言改造php仿优酷-ES改造优化接口

第六课 实战go语言改造php仿优酷-ES改造优化接口

tags:

  • Beego
  • 慕课网

categories:

  • Elasticsearch

第一节 Elasticsearch介绍

1.1 什么是Elasticsearch ?

  1. 它是全文搜索引擎,是目前搜索引擎的首选。
  2. 不仅仅可以做搜索引擎,可以做数据存储,每个字段都可以检索。
  3. 维基百科、github等都在使用它。

1.2 Elasticsearch特点

  1. 快速
  2. 灵活
  3. 稳定
  4. 简单
  5. 注意: 准实时(有不到1S的延时)

1.3 Elasticsearch核心概念

  1. 集群
  2. 节点
  3. 分片
  4. 文档
  5. 副本
    在这里插入图片描述
    在这里插入图片描述

1.4 全文检索和分词

  1. 内容提前索引并分词保存
  2. 查询关键字分词,有一个相同时就会被检索出来
  3. 分词库和屏蔽词库

第二节 Elasticsearch的基本封装

2.1 ES基本操作

  1. 创建索引、创建字段,注意:字段不可删除和修改
  2. 添加、修改、删除、列表,采用API调用实现。
  3. 搜索功能封装,并实现搜索功能
  4. 添加和修改功能封装
  5. 删除功能封装

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值