4 changed files with 145 additions and 2 deletions
@ -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…
Reference in new issue