Browse Source

es 完成

layui
nelson 6 years ago
parent
commit
8e29e43595
  1. 9
      controllers/BlogController.go
  2. 2
      main.go
  3. 1
      routers/BlogRouter.go
  4. 135
      utils/EsUtil.go

9
controllers/BlogController.go

@ -122,7 +122,7 @@ func (this *BlogController) Get() {
this.Data["Top"] = blogs
}
//utils.Index()
utils.Save(blog)
utils.ESSave(blog)
this.Data["Blog"] = blog
this.Data["UserId"] = this.GetSession("userid")
this.Data["HeadImg"] = this.GetSession("headimg")
@ -148,6 +148,7 @@ func (this *BlogController) Del() {
return
}
idStr := this.Ctx.Input.Param(":id")
utils.ESDelete(idStr)
id, _ := strconv.ParseInt(idStr, 10, 64)
blog, err := blogService.GetBlog(id)
if err != nil {
@ -221,3 +222,9 @@ func (this *BlogController) BlogsPage() {
this.TplName = "blogs.html"
}
func (this *BlogController) Search() {
blog, _ := utils.Search("elk")
this.Data["json"] = models.ReurnData("",blog)
this.ServeJSON()
}

2
main.go

@ -20,7 +20,7 @@ func main() {
orm.RunSyncdb("default", false, true)
beego.AddFuncMap("NAdd",NAdd)
logs.SetLogger(logs.AdapterFile, `{"filename":"/opt/logs/aiprose.log","level":3}`)
logs.SetLogger(logs.AdapterFile, `{"filename":"/opt/logs/aiprose.log","level":1}`)
beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
AllowAllOrigins: true,
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},

1
routers/BlogRouter.go

@ -13,4 +13,5 @@ func init() {
beego.Router("/blog/:id([0-9]+)", &controllers.BlogController{}, "get:Get")
beego.Router("/blogs", &controllers.BlogController{}, "get:BlogsPage")
beego.Router("/blog/new", &controllers.BlogController{}, "get:New")
beego.Router("/open/blog/search", &controllers.BlogController{}, "get:Search")
}

135
utils/EsUtil.go

@ -0,0 +1,135 @@
package utils
import (
"beeblog/models"
"context"
"fmt"
"github.com/olivere/elastic"
"log"
"os"
"reflect"
"strconv"
"time"
)
var client *elastic.Client
var host = "http://47.98.109.5:8209"
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"
}
}
}
}
}`
func init() {
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)
}
}
func Index() {
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索引")
}
}
func ESSave(blog *models.Blog) {
ctx := context.Background()
id := strconv.FormatInt(blog.Id,10)
put1, err := client.Index().Index("beeblog").Type("beeblog").Id(id).BodyJson(blog).Do(ctx)
if err != nil {
// Handle error
panic(err)
}
fmt.Printf("Indexed beeblog %s to index %s, type %s\n", put1.Id, put1.Index, put1.Type)
}
//删除
func ESDelete(id string) {
res, err := client.Delete().Index("beeblog").
Type("beeblog").
Id(id).
Do(context.Background())
if err != nil {
println(err.Error())
return
}
fmt.Printf("delete result %s\n", res.Result)
}
func Search(key string) (*models.Blog,error) {
ctx := context.Background()
query := elastic.NewMultiMatchQuery(key,"Title","BlogHtml")
searchResult, err := client.Search().
Index("beeblog"). // 指定index,返回一个*SearchService对象
//Type("beeblog").
Query(query). // 设置查询体,返回同一个*SearchService对象
//Sort("user", true). // 按照user升序排列
//From(0).Size(10). // 从第一条数据,找十条,即0-9
Pretty(true). // 使查询request和返回的结果格式美观
Do(ctx) // 返回一个*SearchResult
if err != nil {
println("search error",err.Error())
return nil,err
}
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)
return &t,nil
}
if err != nil {
panic(err)
}
return nil,nil
}
Loading…
Cancel
Save