码农笔录博客源码
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

138 lines
3.0 KiB

před 6 roky
package utils
import (
"beeblog/models"
"context"
"fmt"
před 3 roky
beego "github.com/beego/beego/v2/server/web"
před 6 roky
"github.com/olivere/elastic"
před 3 roky
"log"
"os"
před 6 roky
"reflect"
"strconv"
před 3 roky
"time"
před 6 roky
)
před 4 roky
před 6 roky
var client *elastic.Client
před 4 roky
před 6 roky
const mapping = `
{
"settings":{
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings":{
"beeblog":{
"properties":{
"UserId":{
"type":"long"
},
"BlogHtml":{
"type":"text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"Ctime":{
"type":"date"
},
"Title":{
"type":"text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"Browses":{
"type":"long"
}
}
}
}
}`
před 3 roky
func init() {
host, _ := beego.AppConfig.String("eshost")
var err error
client, err = elastic.NewClient(
elastic.SetURL(host),
elastic.SetSniff(false),
elastic.SetHealthcheckInterval(10*time.Second),
elastic.SetGzip(true),
elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)),
elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)))
if err != nil {
panic(err)
}
}
před 6 roky
před 4 roky
func Index() {
před 6 roky
ctx := context.Background()
exists, err := client.IndexExists("beeblog").Do(ctx)
if err != nil {
panic(err)
}
if !exists {
createIndex, err := client.CreateIndex("beeblog").BodyString(mapping).Do(ctx)
if err != nil {
panic(err)
}
if !createIndex.Acknowledged {
fmt.Println("请求未被接收到")
}
fmt.Println(createIndex)
} else {
fmt.Println("已经存在beeblog索引")
}
}
před 4 roky
func ESSave(blog *models.Blog) {
před 6 roky
ctx := context.Background()
před 4 roky
id := strconv.FormatInt(blog.Id, 10)
před 6 roky
_, err := client.Index().Index("beeblog").Type("beeblog").Id(id).BodyJson(blog).Do(ctx)
před 6 roky
if err != nil {
před 6 roky
fmt.Println(err)
return
před 6 roky
}
}
před 4 roky
před 6 roky
//删除
func ESDelete(id string) {
před 6 roky
_, err := client.Delete().Index("beeblog").
před 6 roky
Type("beeblog").
Id(id).
Do(context.Background())
if err != nil {
println(err.Error())
return
}
}
před 4 roky
func Search(key string) (*models.Blog, error) {
před 6 roky
ctx := context.Background()
před 4 roky
query := elastic.NewMultiMatchQuery(key, "Title", "BlogHtml")
před 6 roky
searchResult, err := client.Search().
před 4 roky
Index("beeblog"). // 指定index,返回一个*SearchService对象
před 6 roky
//Type("beeblog").
před 4 roky
Query(query). // 设置查询体,返回同一个*SearchService对象
před 6 roky
//Sort("user", true). // 按照user升序排列
//From(0).Size(10). // 从第一条数据,找十条,即0-9
před 4 roky
Pretty(true). // 使查询request和返回的结果格式美观
Do(ctx) // 返回一个*SearchResult
před 6 roky
if err != nil {
před 4 roky
println("search error", err.Error())
return nil, err
před 6 roky
}
fmt.Printf("找到 [%d] 组tweets\n", searchResult.Hits.TotalHits)
// 查看匹配到多少组数据
fmt.Printf("找到 [%d] 组tweets\n", searchResult.TotalHits())
var typ models.Blog
for _, item := range searchResult.Each(reflect.TypeOf(typ)) { //从搜索结果中取数据的方法
t := item.(models.Blog)
fmt.Printf("%#v\n", t)
před 4 roky
return &t, nil
před 6 roky
}
if err != nil {
panic(err)
}
před 4 roky
return nil, nil
}