Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/service/bbq/search/api/grpc/v1:all-srcs",
"//app/service/bbq/search/cmd:all-srcs",
"//app/service/bbq/search/conf:all-srcs",
"//app/service/bbq/search/dao:all-srcs",
"//app/service/bbq/search/model:all-srcs",
"//app/service/bbq/search/server/grpc:all-srcs",
"//app/service/bbq/search/server/http:all-srcs",
"//app/service/bbq/search/service:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,2 @@
# v1.0.0
1. 视频es搜索一期

View File

@@ -0,0 +1,9 @@
# Owner
daiwei
yangyucheng
liuzhiquan
# Author
# Reviewer
daiwei

View File

@@ -0,0 +1,14 @@
# See the OWNERS docs at https://go.k8s.io/owners
approvers:
- daiwei
- liuzhiquan
- yangyucheng
labels:
- bbq
- service
- service/bbq/search
options:
no_parent_owners: true
reviewers:
- daiwei

View File

@@ -0,0 +1,12 @@
# search-service
# 项目简介
1.
# 编译环境
# 依赖包
# 编译执行

View File

@@ -0,0 +1,56 @@
load(
"@io_bazel_rules_go//proto:def.bzl",
"go_proto_library",
)
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
proto_library(
name = "v1_proto",
srcs = ["api.proto"],
tags = ["automanaged"],
deps = ["@gogo_special_proto//github.com/gogo/protobuf/gogoproto"],
)
go_proto_library(
name = "v1_go_proto",
compilers = ["@io_bazel_rules_go//proto:gogofast_grpc"],
importpath = "go-common/app/service/bbq/search/api/grpc/v1",
proto = ":v1_proto",
tags = ["manual"],
deps = ["@com_github_gogo_protobuf//gogoproto:go_default_library"],
)
go_library(
name = "go_default_library",
srcs = [],
embed = [":v1_go_proto"],
importpath = "go-common/app/service/bbq/search/api/grpc/v1",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"@com_github_gogo_protobuf//gogoproto:go_default_library",
"@com_github_gogo_protobuf//proto:go_default_library",
"@org_golang_google_grpc//:go_default_library",
"@org_golang_x_net//context:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,169 @@
syntax = "proto3";
package bbq.service.search.v1;
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
option go_package = "v1";
option (gogoproto.goproto_getters_all) = false;
option (gogoproto.goproto_stringer_all) = false;
option (gogoproto.stringer_all) = true;
message SaveVideoRequest{
option (gogoproto.goproto_stringer) = false;
repeated VideoESInfo list = 1 [(gogoproto.jsontag) = "list",(gogoproto.moretags) = "form:\"list\" validate:\"required\""];
}
message VideoESInfo{
option (gogoproto.goproto_stringer) = false;
int64 svid = 1 [(gogoproto.jsontag) = "svid",(gogoproto.moretags) = "form:\"svid\"",(gogoproto.customname)= "SVID"];
string title = 2 [(gogoproto.jsontag) = "title",(gogoproto.moretags) = "form:\"title\""];
string content = 3 [(gogoproto.jsontag) = "content",(gogoproto.moretags) = "form:\"content\""];
int64 mid = 4 [(gogoproto.jsontag) = "mid",(gogoproto.moretags) = "form:\"mid\"",(gogoproto.customname)= "MID"];
int64 cid = 5 [(gogoproto.jsontag) = "cid",(gogoproto.moretags) = "form:\"cid\"",(gogoproto.customname)= "CID"];
int64 pubtime = 6 [(gogoproto.jsontag) = "pubtime",(gogoproto.moretags) = "form:\"pubtime\""];
int64 ctime = 7 [(gogoproto.jsontag) = "ctime",(gogoproto.moretags) = "form:\"ctime\""];
int64 mtime = 8 [(gogoproto.jsontag) = "mtime",(gogoproto.moretags) = "form:\"mtime\""];
int64 duration = 9 [(gogoproto.jsontag) = "duration",(gogoproto.moretags) = "form:\"duration\""];
int64 original = 10 [(gogoproto.jsontag) = "original",(gogoproto.moretags) = "form:\"original\""];
int64 state = 11 [(gogoproto.jsontag) = "state",(gogoproto.moretags) = "form:\"state\""];
int64 ver_id = 12 [(gogoproto.jsontag) = "ver_id",(gogoproto.moretags) = "form:\"ver_id\"",(gogoproto.customname)= "VerID"];
string ver = 13 [(gogoproto.jsontag) = "ver",(gogoproto.moretags) = "form:\"ver\""];
int64 from = 14 [(gogoproto.jsontag) = "from",(gogoproto.moretags) = "form:\"from\""];
int64 avid = 15 [(gogoproto.jsontag) = "avid",(gogoproto.moretags) = "form:\"avid\"",(gogoproto.customname)= "AVID"];
int64 tid = 16 [(gogoproto.jsontag) = "tid",(gogoproto.moretags) = "form:\"tid\""];
int64 sub_tid = 17 [(gogoproto.jsontag) = "sub_tid",(gogoproto.moretags) = "form:\"sub_tid\""];
int64 score = 18 [(gogoproto.jsontag) = "score",(gogoproto.moretags) = "form:\"score\""];
int64 rough_score = 19 [(gogoproto.jsontag) = "rough_score",(gogoproto.moretags) = "form:\"rough_score\""];
repeated VideoESTags tags = 20 [(gogoproto.jsontag) = "tags",(gogoproto.moretags) = "form:\"tags\""];
int64 play_hive = 21 [(gogoproto.jsontag) = "play_hive",(gogoproto.moretags) = "form:\"play_hive\""];
int64 fav_hive = 22 [(gogoproto.jsontag) = "fav_hive",(gogoproto.moretags) = "form:\"fav_hive\""];
int64 coin_hive = 23 [(gogoproto.jsontag) = "coin_hive",(gogoproto.moretags) = "form:\"coin_hive\""];
int64 subtitles_hive = 24 [(gogoproto.jsontag) = "subtitles_hive",(gogoproto.moretags) = "form:\"subtitles_hive\""];
int64 likes_hive = 25 [(gogoproto.jsontag) = "likes_hive",(gogoproto.moretags) = "form:\"likes_hive\""];
int64 share_hive = 26 [(gogoproto.jsontag) = "share_hive",(gogoproto.moretags) = "form:\"share_hive\""];
int64 report_hive = 27 [(gogoproto.jsontag) = "report_hive",(gogoproto.moretags) = "form:\"report_hive\""];
int64 duration_daily_hive = 28 [(gogoproto.jsontag) = "duration_daily_hive",(gogoproto.moretags) = "form:\"duration_daily_hive\""];
int64 duration_all_hive = 29 [(gogoproto.jsontag) = "duration_all_hive",(gogoproto.moretags) = "form:\"duration_all_hive\""];
int64 reply_hive = 30 [(gogoproto.jsontag) = "reply_hive",(gogoproto.moretags) = "form:\"reply_hive\""];
int64 share_daily_hive = 31 [(gogoproto.jsontag) = "share_daily_hive",(gogoproto.moretags) = "form:\"share_daily_hive\""];
int64 play_daily_hive = 32 [(gogoproto.jsontag) = "play_daily_hive",(gogoproto.moretags) = "form:\"play_daily_hive\""];
int64 subtitles_daily_hive = 33 [(gogoproto.jsontag) = "subtitles_daily_hive",(gogoproto.moretags) = "form:\"subtitles_daily_hive\""];
int64 likes_daily_hive = 34 [(gogoproto.jsontag) = "likes_daily_hive",(gogoproto.moretags) = "form:\"likes_daily_hive\""];
int64 fav_daily_hive = 35 [(gogoproto.jsontag) = "fav_daily_hive",(gogoproto.moretags) = "form:\"fav_daily_hive\""];
int64 reply_daily_hive = 36 [(gogoproto.jsontag) = "reply_daily_hive",(gogoproto.moretags) = "form:\"reply_daily_hive\""];
int64 access_hive = 37 [(gogoproto.jsontag) = "access_hive",(gogoproto.moretags) = "form:\"access_hive\""];
int64 play = 38 [(gogoproto.jsontag) = "play",(gogoproto.moretags) = "form:\"play\""];
int64 subtitles = 39 [(gogoproto.jsontag) = "subtitles",(gogoproto.moretags) = "form:\"subtitles\""];
int64 like = 40 [(gogoproto.jsontag) = "like",(gogoproto.moretags) = "form:\"like\""];
int64 share = 41 [(gogoproto.jsontag) = "share",(gogoproto.moretags) = "form:\"share\""];
int64 report = 42 [(gogoproto.jsontag) = "report",(gogoproto.moretags) = "form:\"report\""];
repeated int64 similar_id = 43 [(gogoproto.jsontag) = "similar_id",(gogoproto.moretags) = "form:\"similar_id\"",(gogoproto.customname)= "SimilarID"];
int64 is_full_screen = 44 [(gogoproto.jsontag) = "is_full_screen",(gogoproto.moretags) = "form:\"is_full_screen\"",(gogoproto.customname)= "ISFullScreen"];
}
message VideoESTags{
int64 id = 1 [(gogoproto.jsontag) = "id",(gogoproto.moretags) = "form:\"id\"",(gogoproto.customname)= "ID"];
string name = 2 [(gogoproto.jsontag) = "name",(gogoproto.moretags) = "form:\"name\""];
int64 type = 3 [(gogoproto.jsontag) = "type",(gogoproto.moretags) = "form:\"type\""];
}
message SaveVideoResponse{}
message RecVideoInfo{
option (gogoproto.goproto_stringer) = false;
int64 svid = 1 [(gogoproto.jsontag) = "svid",(gogoproto.moretags) = "form:\"svid\"",(gogoproto.customname)= "SVID"];
string title = 2 [(gogoproto.jsontag) = "title",(gogoproto.moretags) = "form:\"title\""];
string content = 3 [(gogoproto.jsontag) = "content",(gogoproto.moretags) = "form:\"content\""];
int64 mid = 4 [(gogoproto.jsontag) = "mid",(gogoproto.moretags) = "form:\"mid\"",(gogoproto.customname)= "MID"];
int64 cid = 5 [(gogoproto.jsontag) = "cid",(gogoproto.moretags) = "form:\"cid\"",(gogoproto.customname)= "CID"];
int64 pubtime = 6 [(gogoproto.jsontag) = "pubtime",(gogoproto.moretags) = "form:\"pubtime\""];
int64 ctime = 7 [(gogoproto.jsontag) = "ctime",(gogoproto.moretags) = "form:\"ctime\""];
int64 mtime = 8 [(gogoproto.jsontag) = "mtime",(gogoproto.moretags) = "form:\"mtime\""];
int64 duration = 9 [(gogoproto.jsontag) = "duration",(gogoproto.moretags) = "form:\"duration\""];
int64 original = 10 [(gogoproto.jsontag) = "original",(gogoproto.moretags) = "form:\"original\""];
int64 state = 11 [(gogoproto.jsontag) = "state",(gogoproto.moretags) = "form:\"state\""];
int64 ver_id = 12 [(gogoproto.jsontag) = "ver_id",(gogoproto.moretags) = "form:\"ver_id\"",(gogoproto.customname)= "VerID"];
string ver = 13 [(gogoproto.jsontag) = "ver",(gogoproto.moretags) = "form:\"ver\""];
int64 from = 14 [(gogoproto.jsontag) = "from",(gogoproto.moretags) = "form:\"from\""];
int64 avid = 15 [(gogoproto.jsontag) = "avid",(gogoproto.moretags) = "form:\"avid\"",(gogoproto.customname)= "AVID"];
int64 tid = 16 [(gogoproto.jsontag) = "tid",(gogoproto.moretags) = "form:\"tid\""];
int64 sub_tid = 17 [(gogoproto.jsontag) = "sub_tid",(gogoproto.moretags) = "form:\"sub_tid\""];
int64 score = 18 [(gogoproto.jsontag) = "score",(gogoproto.moretags) = "form:\"score\""];
int64 rough_score = 19 [(gogoproto.jsontag) = "rough_score",(gogoproto.moretags) = "form:\"rough_score\""];
repeated VideoESTags tags = 20 [(gogoproto.jsontag) = "tags",(gogoproto.moretags) = "form:\"tags\""];
int64 play_hive = 21 [(gogoproto.jsontag) = "play_hive",(gogoproto.moretags) = "form:\"play_hive\""];
int64 fav_hive = 22 [(gogoproto.jsontag) = "fav_hive",(gogoproto.moretags) = "form:\"fav_hive\""];
int64 coin_hive = 23 [(gogoproto.jsontag) = "coin_hive",(gogoproto.moretags) = "form:\"coin_hive\""];
int64 subtitles_hive = 24 [(gogoproto.jsontag) = "subtitles_hive",(gogoproto.moretags) = "form:\"subtitles_hive\""];
int64 likes_hive = 25 [(gogoproto.jsontag) = "likes_hive",(gogoproto.moretags) = "form:\"likes_hive\""];
int64 share_hive = 26 [(gogoproto.jsontag) = "share_hive",(gogoproto.moretags) = "form:\"share_hive\""];
int64 report_hive = 27 [(gogoproto.jsontag) = "report_hive",(gogoproto.moretags) = "form:\"report_hive\""];
int64 duration_daily_hive = 28 [(gogoproto.jsontag) = "duration_daily_hive",(gogoproto.moretags) = "form:\"duration_daily_hive\""];
int64 duration_all_hive = 29 [(gogoproto.jsontag) = "duration_all_hive",(gogoproto.moretags) = "form:\"duration_all_hive\""];
int64 reply_hive = 30 [(gogoproto.jsontag) = "reply_hive",(gogoproto.moretags) = "form:\"reply_hive\""];
int64 share_daily_hive = 31 [(gogoproto.jsontag) = "share_daily_hive",(gogoproto.moretags) = "form:\"share_daily_hive\""];
int64 play_daily_hive = 32 [(gogoproto.jsontag) = "play_daily_hive",(gogoproto.moretags) = "form:\"play_daily_hive\""];
int64 subtitles_daily_hive = 33 [(gogoproto.jsontag) = "subtitles_daily_hive",(gogoproto.moretags) = "form:\"subtitles_daily_hive\""];
int64 likes_daily_hive = 34 [(gogoproto.jsontag) = "likes_daily_hive",(gogoproto.moretags) = "form:\"likes_daily_hive\""];
int64 fav_daily_hive = 35 [(gogoproto.jsontag) = "fav_daily_hive",(gogoproto.moretags) = "form:\"fav_daily_hive\""];
int64 reply_daily_hive = 36 [(gogoproto.jsontag) = "reply_daily_hive",(gogoproto.moretags) = "form:\"reply_daily_hive\""];
int64 access_hive = 37 [(gogoproto.jsontag) = "access_hive",(gogoproto.moretags) = "form:\"access_hive\""];
int64 play = 38 [(gogoproto.jsontag) = "play",(gogoproto.moretags) = "form:\"play\""];
int64 subtitles = 39 [(gogoproto.jsontag) = "subtitles",(gogoproto.moretags) = "form:\"subtitles\""];
int64 like = 40 [(gogoproto.jsontag) = "like",(gogoproto.moretags) = "form:\"like\""];
int64 share = 41 [(gogoproto.jsontag) = "share",(gogoproto.moretags) = "form:\"share\""];
int64 report = 42 [(gogoproto.jsontag) = "report",(gogoproto.moretags) = "form:\"report\""];
repeated int64 similar_id =43 [(gogoproto.jsontag) = "similar_id",(gogoproto.moretags) = "form:\"similar_id\"",(gogoproto.customname)= "SimilarID"];
float es_score = 44 [(gogoproto.jsontag) = "es_score",(gogoproto.moretags) = "form:\"es_score\"",(gogoproto.customname)= "ESScore", (gogoproto.casttype) = "float64"];
repeated float custom_score = 45 [(gogoproto.jsontag) = "custom_score",(gogoproto.moretags) = "form:\"custom_score\"", (gogoproto.casttype) = "float64"];
int64 is_full_screen = 46 [(gogoproto.jsontag) = "is_full_screen",(gogoproto.moretags) = "form:\"is_full_screen\"",(gogoproto.customname)= "ISFullScreen"];
}
message RecVideoDataRequest{
option (gogoproto.goproto_stringer) = false;
string query = 1 [(gogoproto.jsontag) = "query",(gogoproto.moretags) = "form:\"query\" validate:\"required\""];
}
message RecVideoDataResponse{
option (gogoproto.goproto_stringer) = false;
int64 total = 1 [(gogoproto.jsontag) = "total"];
repeated RecVideoInfo list = 2 [(gogoproto.jsontag) = "list"];
}
message VideoDataRequest{
option (gogoproto.goproto_stringer) = false;
string query = 1 [(gogoproto.jsontag) = "query",(gogoproto.moretags) = "form:\"query\" validate:\"required\""];
}
message VideoDataResponse{
option (gogoproto.goproto_stringer) = false;
int64 total = 1 [(gogoproto.jsontag) = "total"];
repeated VideoESInfo list = 2 [(gogoproto.jsontag) = "list"];
}
message ESVideoDataRequest{
option (gogoproto.goproto_stringer) = false;
string query = 1 [(gogoproto.jsontag) = "query",(gogoproto.moretags) = "form:\"query\" validate:\"required\""];
}
message ESVideoDataResponse{
option (gogoproto.goproto_stringer) = false;
int64 total = 1 [(gogoproto.jsontag) = "total"];
repeated RecVideoInfo list = 2 [(gogoproto.jsontag) = "list"];
}
message DelVideoBySVIDRequest{
option (gogoproto.goproto_stringer) = false;
repeated int64 svids= 1 [(gogoproto.jsontag) = "query",(gogoproto.moretags) = "form:\"svids\" validate:\"required\"",(gogoproto.customname)= "SVIDs"];
}
message DelVideoBySVIDResponse{}
service Search{
rpc SaveVideo(SaveVideoRequest) returns(SaveVideoResponse);
rpc VideoData(VideoDataRequest) returns(VideoDataResponse);
rpc RecVideoData(RecVideoDataRequest) returns(RecVideoDataResponse);
rpc ESVideoData(ESVideoDataRequest) returns(ESVideoDataResponse);
rpc DelVideoBySVID(DelVideoBySVIDRequest) returns(DelVideoBySVIDResponse);
}

View File

@@ -0,0 +1 @@
# HTTP API文档

View File

@@ -0,0 +1,48 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_binary",
"go_library",
)
go_binary(
name = "cmd",
embed = [":go_default_library"],
tags = ["automanaged"],
)
go_library(
name = "go_default_library",
srcs = ["main.go"],
data = ["test.toml"],
importpath = "go-common/app/service/bbq/search/cmd",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/bbq/search/conf:go_default_library",
"//app/service/bbq/search/server/grpc:go_default_library",
"//app/service/bbq/search/server/http:go_default_library",
"//app/service/bbq/search/service:go_default_library",
"//library/ecode/tip:go_default_library",
"//library/log:go_default_library",
"//library/net/trace:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/service/bbq/search/cmd/client:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,40 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_binary",
"go_library",
)
go_binary(
name = "client",
embed = [":go_default_library"],
tags = ["automanaged"],
)
go_library(
name = "go_default_library",
srcs = ["client.go"],
importpath = "go-common/app/service/bbq/search/cmd/client",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/bbq/search/api/grpc/v1:go_default_library",
"//app/service/bbq/search/model:go_default_library",
"@org_golang_google_grpc//:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,135 @@
package main
import (
"bytes"
"context"
"encoding/json"
"flag"
"fmt"
"go-common/app/service/bbq/search/api/grpc/v1"
"go-common/app/service/bbq/search/model"
"google.golang.org/grpc"
"os"
"time"
)
var (
serverAddr = flag.String("server_addr", "127.0.0.1:9000", "The server address in the format of host:port")
)
func main() {
conn, err := grpc.Dial(*serverAddr, grpc.WithInsecure())
if err != nil {
fmt.Println("11111", err)
return
}
defer conn.Close()
salesClient := v1.NewSearchClient(conn)
time1 := time.Now().UnixNano()
data := new(v1.SaveVideoRequest)
for i := 0; i < 1; i++ {
tmp := &v1.VideoESInfo{
SVID: int64(4 + i),
MID: 1,
CID: 1,
AVID: 1,
Title: "小姐姐 wo 好看 cityy" + string(i),
Content: "占位占位",
Pubtime: 12,
Duration: 0,
Original: 123,
State: 1,
From: 1,
VerID: 12,
Ver: "lasfjn123",
Ctime: 123,
Mtime: 123,
}
tags := make(map[int64]string)
//tags[1] = "舞蹈"
tags[2] = "直播"
//tags[3] = "开心"
for i, v := range tags {
tmp.Tags = append(tmp.Tags, &v1.VideoESTags{ID: i, Name: v})
}
data.List = append(data.List, tmp)
}
//res1,err := salesClient.SaveVideo(context.Background(), data)
//fmt.Println("CreateIndex",res1,err)
calc := &model.Calc{
Open: 1,
PlayRatio: 0.3,
FavRatio: 0.05,
LikeRatio: 0.15,
CoinRatio: 0.1,
ReplyRatio: 0.2,
ShareRatio: 0.1,
}
hotTags := []string{"美女"}
where := new(model.Where)
where.In = make(map[string][]interface{})
for _, tag := range hotTags {
where.In["tags.name"] = append(where.In["tags.name"], tag)
}
where.In["state"] = append(where.In["state"], 3)
where.NotIn = make(map[string][]interface{})
where.NotIn["avid"] = append(where.NotIn["avid"], 27035488)
where.Lte = make(map[string]int64)
where.Lte["svid"] = 1168
where.Gte = make(map[string]int64)
where.Gte["avid"] = 28457770
filter := make(map[string]interface{})
filter["buvid"] = "bbqtestbuvid"
filter["mid"] = 123
query := model.Query{
Calc: calc,
Where: where,
From: 0,
Size: 1,
Filter: filter,
}
queryBody, err := json.Marshal(query)
fmt.Println(query.Where)
fmt.Println(string(queryBody))
//del := new(v1.DelVideoBySVIDRequest)
//del.SVIDs = append(del.SVIDs, 84)
//res4, err := salesClient.DelVideoBySVID(context.Background(), del)
//fmt.Println(res4, err)
res3, err := salesClient.RecVideoData(context.Background(), &v1.RecVideoDataRequest{Query: string(queryBody)})
fmt.Println(res3)
fmt.Println(err)
//return
//res2,err := salesClient.RecVideoData(context.Background(), &v1.RecVideoDataRequest{PageNum:0,PageSize:2})
//res2,err := salesClient.RecVideoData(context.Background(), &v1.RecVideoDataRequest{Query:"{\"calc\":{\"open\":1,\"fav_ratio\":1.0,\"like_ratio\":0.5,\"pub_ratio\":0.3},\"where\":{\"in\":{\"title\":[\"舞蹈\",\"美女\"],\"tag.Name\":[\"小姐姐\"]}},\"limit\":2}"})
res2, err := salesClient.RecVideoData(context.Background(), &v1.RecVideoDataRequest{Query: string(queryBody)})
//res2,err := salesClient.RecVideoData(context.Background(), &v1.RecVideoDataRequest{Query:"{}"})
//fmt.Println("VideoData",res2,err)
var out bytes.Buffer
var b []byte
b, _ = json.Marshal(res2)
json.Indent(&out, b, "", "\t")
out.WriteTo(os.Stdout)
time2 := time.Now().UnixNano()
fmt.Println((time2 - time1) / 1e6)
//fmt.Println(queryBody)
//salesClientMis := v1.NewSalesMisClient(conn)
//
//
//res2,err := salesClientMis.GetGroupOrdersMis(context.Background(), &v1.GetGroupOrdersMisRequest{OrderID:0})
//fmt.Println("222",res2,err)
fmt.Println(err)
return
}

View File

@@ -0,0 +1,46 @@
package main
import (
"flag"
"os"
"os/signal"
"syscall"
"go-common/app/service/bbq/search/conf"
"go-common/app/service/bbq/search/server/grpc"
"go-common/app/service/bbq/search/server/http"
"go-common/app/service/bbq/search/service"
ecode "go-common/library/ecode/tip"
"go-common/library/log"
"go-common/library/net/trace"
)
func main() {
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
log.Init(conf.Conf.Log)
defer log.Close()
log.Info("start")
trace.Init(conf.Conf.Tracer)
defer trace.Close()
ecode.Init(conf.Conf.Ecode)
srv := service.New(conf.Conf)
grpc.New(srv)
http.Init(conf.Conf, srv)
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
for {
s := <-c
log.Info("get a signal %s", s.String())
switch s {
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
log.Info("exit")
return
case syscall.SIGHUP:
default:
return
}
}
}

View File

@@ -0,0 +1,41 @@
[log]
dir = "/data/log/bbq"
[bm]
addr = "0.0.0.0:8803"
timeout = "1s"
[mysql]
#addr = "127.0.0.1:3306"
#dsn = "root:123456@tcp(127.0.0.1:3306)/bbq?allowNativePasswords=true&timeout=200ms&readTimeout=200ms&writeTimeout=200ms&parseTime=true&loc=Local&charset=utf8,utf8mb4"
#readDSN = ["root:123456@tcp(127.0.0.2:3306)/bbq?allowNativePasswords=true&timeout=200ms&readTimeout=200ms&writeTimeout=200ms&parseTime=true&loc=Local&charset=utf8,utf8mb4"]
addr = "172.16.38.91:3306"
dsn = "root:123456@tcp(172.16.38.91:3306)/bbq?timeout=200ms&readTimeout=200ms&writeTimeout=200ms&parseTime=true&loc=Local&charset=utf8,utf8mb4"
readDSN = ["root:123456@tcp(172.16.38.91:3306)/bbq?timeout=200ms&readTimeout=200ms&writeTimeout=200ms&parseTime=true&loc=Local&charset=utf8,utf8mb4"]
active = 20
idle = 10
idleTimeout ="4h"
queryTimeout = "100ms"
execTimeout = "100ms"
tranTimeout = "200ms"
[redis]
name = "search-service"
proto = "tcp"
addr = ""
idle = 10
active = 10
dialTimeout = "1s"
readTimeout = "1s"
writeTimeout = "1s"
idleTimeout = "10s"
expire = "1m"
[es]
[es.bbq]
addr = ["http://172.16.38.91:9200"]
timeout = "1s"
[es.cms]
addr = ["http://172.16.38.91:9200"]
timeout = "1s"

View File

@@ -0,0 +1,40 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["conf.go"],
importpath = "go-common/app/service/bbq/search/conf",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/cache/memcache:go_default_library",
"//library/cache/redis:go_default_library",
"//library/conf:go_default_library",
"//library/database/sql:go_default_library",
"//library/ecode/tip:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/net/trace:go_default_library",
"//vendor/github.com/BurntSushi/toml:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,95 @@
package conf
import (
"errors"
"flag"
"go-common/library/cache/memcache"
"go-common/library/cache/redis"
"go-common/library/conf"
"go-common/library/database/sql"
ecode "go-common/library/ecode/tip"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/verify"
"go-common/library/net/trace"
"github.com/BurntSushi/toml"
)
var (
confPath string
client *conf.Client
// Conf config
Conf = &Config{}
)
// Config .
type Config struct {
Log *log.Config
BM *bm.ServerConfig
Verify *verify.Config
Tracer *trace.Config
Redis *redis.Config
Memcache *memcache.Config
MySQL *sql.Config
Ecode *ecode.Config
Es map[string]*Es
}
// Es .
type Es struct {
Addr []string
Timeout string
}
func init() {
flag.StringVar(&confPath, "conf", "", "default config path")
}
// Init init conf
func Init() error {
if confPath != "" {
return local()
}
return remote()
}
func local() (err error) {
_, err = toml.DecodeFile(confPath, &Conf)
return
}
func remote() (err error) {
if client, err = conf.New(); err != nil {
return
}
if err = load(); err != nil {
return
}
go func() {
for range client.Event() {
log.Info("config reload")
if load() != nil {
log.Error("config reload error (%v)", err)
}
}
}()
return
}
func load() (err error) {
var (
s string
ok bool
tmpConf *Config
)
if s, ok = client.Toml2(); !ok {
return errors.New("load config center error")
}
if _, err = toml.Decode(s, &tmpConf); err != nil {
return errors.New("could not decode config")
}
*Conf = *tmpConf
return
}

View File

@@ -0,0 +1,40 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"dao.go",
"video.go",
],
importpath = "go-common/app/service/bbq/search/dao",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/bbq/search/api/grpc/v1:go_default_library",
"//app/service/bbq/search/conf:go_default_library",
"//library/cache/redis:go_default_library",
"//library/database/sql:go_default_library",
"//library/log:go_default_library",
"//vendor/github.com/json-iterator/go:go_default_library",
"//vendor/gopkg.in/olivere/elastic.v5:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,97 @@
package dao
import (
"context"
"net"
"net/http"
"time"
"fmt"
"go-common/app/service/bbq/search/conf"
"go-common/library/cache/redis"
xsql "go-common/library/database/sql"
"gopkg.in/olivere/elastic.v5"
)
// Dao dao
type Dao struct {
c *conf.Config
redis *redis.Pool
db *xsql.DB
esPool map[string]*elastic.Client
httpClient []*http.Client
}
// New init mysql db
func New(c *conf.Config) (dao *Dao) {
dao = &Dao{
c: c,
redis: redis.NewPool(c.Redis),
db: xsql.NewMySQL(c.MySQL),
esPool: newEsPool(c.Es),
httpClient: dao.createHTTPClient(),
}
dao.createESIndex(_bbqEsName, _videoIndex, _videoMapping)
return
}
// newEsPool new es cluster action
func newEsPool(esInfo map[string]*conf.Es) (esCluster map[string]*elastic.Client) {
esCluster = make(map[string]*elastic.Client)
for esName, e := range esInfo {
client, err := elastic.NewClient(elastic.SetURL(e.Addr...), elastic.SetSniff(false))
if err != nil {
panic(fmt.Sprintf("es:集群连接失败, cluster: %s, %v", esName, err))
}
esCluster[esName] = client
}
return
}
// createESIndex 初始化es索引
func (d *Dao) createESIndex(esName, index, mapping string) {
exist, err := d.esPool[esName].IndexExists(index).Do(context.Background())
if err != nil {
panic(fmt.Sprintf("check if index exists, name(%s) error (%v)", esName, err))
}
if exist {
return
}
if _, err = d.esPool[esName].CreateIndex(index).Body(mapping).Do(context.Background()); err != nil {
panic(fmt.Sprintf("create index, name(%s) error (%v)", esName, err))
}
}
// createHTTPClient .
func (d *Dao) createHTTPClient() []*http.Client {
clients := make([]*http.Client, 0)
for i := 0; i < 10; i++ {
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
MaxIdleConns: 100,
MaxIdleConnsPerHost: 100,
IdleConnTimeout: 30 * time.Second,
},
Timeout: 2 * time.Second,
}
clients = append(clients, client)
}
return clients
}
// Close close the resource.
func (d *Dao) Close() {
d.redis.Close()
d.db.Close()
}
// Ping dao ping
func (d *Dao) Ping(c context.Context) error {
// TODO: if you need use mc,redis, please add
return d.db.Ping(c)
}

View File

@@ -0,0 +1,158 @@
package dao
import (
"context"
"go-common/app/service/bbq/search/api/grpc/v1"
"go-common/app/service/bbq/search/conf"
"go-common/library/log"
"io/ioutil"
"math/rand"
"net/http"
"strconv"
"strings"
"time"
"github.com/json-iterator/go"
"gopkg.in/olivere/elastic.v5"
)
const (
_bbqEsName = "bbq"
_videoIndex = "video"
_videoType = "video_info"
_videoMapping = `
{
"settings":{
"number_of_shards":5,
"number_of_replicas":2,
"index":{
"analysis.analyzer.default.type":"ik_smart"
}
}
}
`
)
//SaveVideo 保存视频信息
func (d *Dao) SaveVideo(c context.Context, videos *v1.SaveVideoRequest) (err error) {
d.createESIndex(_bbqEsName, _videoIndex, _videoMapping)
bulkRequest := d.esPool[_bbqEsName].Bulk()
for _, v := range videos.List {
request := elastic.NewBulkUpdateRequest().Index(_videoIndex).Type(_videoType).Id(strconv.Itoa(int(v.SVID))).Doc(v).DocAsUpsert(true)
bulkRequest.Add(request)
}
if _, err = bulkRequest.Do(c); err != nil {
log.Error("save es [%d] err(%v)", 1, err)
}
return
}
//RecVideoDataElastic 获取视频信息
func (d *Dao) RecVideoDataElastic(c context.Context, query elastic.Query, script *elastic.ScriptSort, from, size int) (total int64, list []*v1.RecVideoInfo, err error) {
search := d.esPool[_bbqEsName].Search().Index(_videoIndex).Type(_videoType)
if query != nil {
search.Query(query)
}
if script != nil {
search.SortBy(script)
}
log.Error("start time(%d)", time.Now().UnixNano())
res, err := search.From(from).Size(size).Timeout(d.c.Es[_bbqEsName].Timeout).Do(c)
if err != nil {
log.Error("video search es (%s) err(%v)", _bbqEsName, err)
return
}
log.Error("do time(%d)", time.Now().UnixNano())
total = res.TotalHits()
list = []*v1.RecVideoInfo{}
for _, value := range res.Hits.Hits {
tmp := new(v1.RecVideoInfo)
byte, _ := jsoniter.Marshal(value.Source)
jsoniter.Unmarshal(byte, tmp)
if value.Score != nil {
tmp.ESScore = float64(*value.Score)
}
if value.Sort != nil {
for _, v := range value.Sort {
tmp.CustomScore = append(tmp.CustomScore, v.(float64))
}
}
list = append(list, tmp)
}
return
}
//VideoData 获取视频信息
func (d *Dao) VideoData(c context.Context, query elastic.Query, from, size int) (total int64, list []*v1.VideoESInfo, err error) {
res, err := d.esPool[_bbqEsName].Search().Index(_videoIndex).Type(_videoType).Query(query).From(from).Size(size).Timeout(d.c.Es[_bbqEsName].Timeout).Do(c)
if err != nil {
log.Error("video search es (%s) err(%v)", _bbqEsName, err)
return
}
total = res.TotalHits()
list = []*v1.VideoESInfo{}
for _, value := range res.Hits.Hits {
tmp := new(v1.VideoESInfo)
byte, _ := jsoniter.Marshal(value.Source)
jsoniter.Unmarshal(byte, tmp)
list = append(list, tmp)
}
return
}
//ESVideoData 获取视频信息
func (d *Dao) ESVideoData(c context.Context, query string) (total int64, list []*v1.RecVideoInfo, err error) {
i := rand.Intn(len(conf.Conf.Es["bbq"].Addr))
req, err := http.NewRequest("POST", conf.Conf.Es["bbq"].Addr[i]+"/video/_search", strings.NewReader(query))
if err != nil {
log.Error("conn es err(%v)", err)
return
}
req.Header.Set("Content-Type", "application/json; charset=UTF-8")
j := rand.Intn(len(d.httpClient))
res, err := d.httpClient[j].Do(req)
if err != nil || res.StatusCode != 200 {
log.Error("conn es http err(%v)", err)
return
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Error("es read body err(%v)", err)
return
}
log.Infov(c, log.KV("query", query), log.KV("response", string(body)))
videos := new(elastic.SearchResult)
jsoniter.Unmarshal(body, &videos)
if videos == nil {
return
}
list = make([]*v1.RecVideoInfo, 0)
total = videos.TotalHits()
for _, value := range videos.Hits.Hits {
tmp := new(v1.RecVideoInfo)
byte, _ := jsoniter.Marshal(value.Source)
jsoniter.Unmarshal(byte, tmp)
list = append(list, tmp)
}
return
}
// DelVideoDataBySVID 根据svid删除视频
func (d *Dao) DelVideoDataBySVID(c context.Context, svid int64) (err error) {
i := rand.Intn(len(conf.Conf.Es["bbq"].Addr))
url := conf.Conf.Es["bbq"].Addr[i] + "/video/video_info/" + strconv.Itoa(int(svid))
req, err := http.NewRequest("DELETE", url, nil)
if err != nil {
log.Error("conn es err(%v)", err)
return
}
j := rand.Intn(len(d.httpClient))
res, err := d.httpClient[j].Do(req)
if err != nil || res.StatusCode != 200 {
log.Error("conn read body err(%v)", err)
}
return
}

View File

@@ -0,0 +1,28 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["model.go"],
importpath = "go-common/app/service/bbq/search/model",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,44 @@
package model
//Query .
type Query struct {
Calc *Calc `json:"calc"`
Where *Where `json:"where"`
Filter map[string]interface{} `json:"filter"`
From int `json:"from"`
Size int `json:"size"`
}
//Calc .
type Calc struct {
Open int64 `json:"open"`
PlayRatio float64 `json:"play_ratio"`
FavRatio float64 `json:"fav_ratio"`
LikeRatio float64 `json:"like_ratio"`
ShareRatio float64 `json:"share_ratio"`
CoinRatio float64 `json:"coin_ratio"`
ReplyRatio float64 `json:"reply_ratio"`
}
//Where .
type Where struct {
In map[string][]interface{} `json:"in"`
NotIn map[string][]interface{} `json:"not_in"`
Lte map[string]int64 `json:"lte"`
Gte map[string]int64 `json:"gte"`
}
// EsParam es请求参数
type EsParam struct {
From int `json:"from"`
Size int `json:"size"`
Query map[string]map[string]interface{} `json:"query"`
Sort []map[string]*Script `json:"sort"`
}
// Script .
type Script struct {
Order string `json:"order"`
Script map[string]interface{} `json:"script"`
Type string `json:"type"`
}

View File

@@ -0,0 +1,34 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["server.go"],
importpath = "go-common/app/service/bbq/search/server/grpc",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/bbq/search/api/grpc/v1:go_default_library",
"//app/service/bbq/search/service:go_default_library",
"//library/net/rpc/warden:go_default_library",
"@org_golang_google_grpc//:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,30 @@
package grpc
import (
"context"
rpcv1 "go-common/app/service/bbq/search/api/grpc/v1"
"go-common/app/service/bbq/search/service"
"go-common/library/net/rpc/warden"
"google.golang.org/grpc"
)
//New 生成rpc服务
func New(srv *service.Service) *warden.Server {
s := warden.NewServer(nil)
s.Use(middleware())
rpcv1.RegisterSearchServer(s.Server(), srv)
_, err := s.Start()
if err != nil {
panic("run server failed!" + err.Error())
}
return s
}
func middleware() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
//call chain
resp, err = handler(ctx, req)
return
}
}

View File

@@ -0,0 +1,35 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["http.go"],
importpath = "go-common/app/service/bbq/search/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/bbq/search/api/grpc/v1:go_default_library",
"//app/service/bbq/search/conf:go_default_library",
"//app/service/bbq/search/service:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,57 @@
package http
import (
"net/http"
"go-common/app/service/bbq/search/api/grpc/v1"
"go-common/app/service/bbq/search/conf"
"go-common/app/service/bbq/search/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
var (
srv *service.Service
)
// Init init
func Init(c *conf.Config, s *service.Service) {
srv = s
engine := bm.DefaultServer(c.BM)
route(engine)
if err := engine.Start(); err != nil {
log.Error("bm Start error(%v)", err)
panic(err)
}
}
func route(e *bm.Engine) {
e.Ping(ping)
e.Register(register)
g := e.Group("/bbq/internal/search")
{
g.GET("/start", howToStart)
}
}
func ping(c *bm.Context) {
if err := srv.Ping(c); err != nil {
log.Error("ping error(%v)", err)
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}
func register(c *bm.Context) {
c.JSON(map[string]interface{}{}, nil)
}
// example for http request handler
func howToStart(c *bm.Context) {
arg := new(v1.RecVideoDataRequest)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(srv.RecVideoData(c, arg))
}

View File

@@ -0,0 +1,41 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"service.go",
"video.go",
],
importpath = "go-common/app/service/bbq/search/service",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/bbq/search/api/grpc/v1:go_default_library",
"//app/service/bbq/search/conf:go_default_library",
"//app/service/bbq/search/dao:go_default_library",
"//app/service/bbq/search/model:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//vendor/github.com/json-iterator/go:go_default_library",
"//vendor/gopkg.in/olivere/elastic.v5:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,34 @@
package service
import (
"context"
"go-common/app/service/bbq/search/conf"
"go-common/app/service/bbq/search/dao"
)
// Service struct
type Service struct {
c *conf.Config
dao *dao.Dao
}
// New init
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
dao: dao.New(c),
}
//s.RecVideoHttp()
return s
}
// Ping Service
func (s *Service) Ping(c context.Context) (err error) {
return s.dao.Ping(c)
}
// Close Service
func (s *Service) Close() {
s.dao.Close()
}

View File

@@ -0,0 +1,210 @@
package service
import (
"context"
"fmt"
"go-common/app/service/bbq/search/api/grpc/v1"
"go-common/app/service/bbq/search/model"
"go-common/library/ecode"
"go-common/library/log"
"time"
"github.com/json-iterator/go"
"gopkg.in/olivere/elastic.v5"
)
//SaveVideo 保存视频信息
func (s *Service) SaveVideo(c context.Context, req *v1.SaveVideoRequest) (res *v1.SaveVideoResponse, err error) {
if err = s.dao.SaveVideo(c, req); err != nil {
err = ecode.SearchCreateIndexErr
}
res = &v1.SaveVideoResponse{}
return
}
//RecVideoData 获取视频信息,给推荐使用
func (s *Service) RecVideoData(c context.Context, req *v1.RecVideoDataRequest) (res *v1.RecVideoDataResponse, err error) {
time1 := time.Now().UnixNano()
esParams := new(model.EsParam)
esParams.Query = make(map[string]map[string]interface{})
params := new(model.Query)
jsoniter.Unmarshal([]byte(req.Query), params)
esParams.From = params.From
esParams.Size = 5000
if params.Size > 0 {
esParams.Size = params.Size
}
b := make(map[string]interface{})
if params.Where != nil {
must := make([]interface{}, 0)
if params.Where.In != nil {
for k, v := range params.Where.In {
ms := make(map[string]interface{})
temp := make(map[string]interface{})
switch v[0].(type) {
case string:
k += ".keyword"
}
temp[k] = v
ms["terms"] = temp
must = append(must, ms)
}
}
if params.Where.Gte != nil {
for k, v := range params.Where.Gte {
rg := make(map[string]interface{})
it := make(map[string]interface{})
kw := make(map[string]interface{})
kw["gte"] = v
it[k] = kw
rg["range"] = it
must = append(must, rg)
}
}
if params.Where.Lte != nil {
for k, v := range params.Where.Lte {
rg := make(map[string]interface{})
it := make(map[string]interface{})
kw := make(map[string]interface{})
kw["lte"] = v
it[k] = kw
rg["range"] = it
must = append(must, rg)
}
}
b["must"] = must
if params.Where.NotIn != nil {
mustNot := make([]interface{}, 0)
for k, v := range params.Where.NotIn {
ms := make(map[string]interface{})
temp := make(map[string]interface{})
switch v[0].(type) {
case string:
k += ".keyword"
}
temp[k] = v
ms["terms"] = temp
mustNot = append(mustNot, ms)
}
b["must_not"] = mustNot
}
}
if len(params.Filter) != 0 {
ft := make(map[string]interface{})
sc := make(map[string]interface{})
sc1 := make(map[string]interface{})
sc1["source"] = "bloom_filter"
sc1["lang"] = "native"
sc1["params"] = params.Filter
sc["script"] = sc1
ft["script"] = sc
b["filter"] = ft
}
esParams.Query["bool"] = b
esParams.Sort = make([]map[string]*model.Script, 0)
if params.Calc != nil && params.Calc.Open == 1 {
tmp1 := make(map[string]float64)
tmp1["play_ratio"] = params.Calc.PlayRatio
tmp1["fav_ratio"] = params.Calc.FavRatio
tmp1["like_ratio"] = params.Calc.LikeRatio
tmp1["share_ratio"] = params.Calc.ShareRatio
tmp1["coin_ratio"] = params.Calc.CoinRatio
tmp1["reply_ratio"] = params.Calc.ReplyRatio
sc := new(model.Script)
sc.Order = "desc"
sc.Type = "number"
sc.Script = make(map[string]interface{})
sc.Script["inline"] = "params.play_ratio * Math.log1p(Math.min(10000, doc['play_hive'].value))/4.0 + 1.0 * params.fav_ratio * (1+doc['fav_hive'].value)/(100+doc['play_hive'].value) + 1.0 * params.like_ratio * (1+doc['likes_hive'].value)/(100+doc['play_hive'].value) + 1.0 * params.share_ratio * (1+doc['share_hive'].value)/(100+doc['play_hive'].value) + 1.0 * params.coin_ratio * (1+doc['coin_hive'].value)/(100+doc['play_hive'].value) + 1.0 * params.reply_ratio * (1+doc['reply_hive'].value)/(100+doc['play_hive'].value)"
sc.Script["params"] = tmp1
sc2 := make(map[string]*model.Script)
sc2["_script"] = sc
esParams.Sort = append(esParams.Sort, sc2)
}
b1, _ := jsoniter.Marshal(esParams)
res = new(v1.RecVideoDataResponse)
//res.Total, res.List, err = s.dao.RecVideoData2(c, string(b1))
if res.Total, res.List, err = s.dao.ESVideoData(c, string(b1)); err != nil {
err = ecode.SearchVideoDataErr
}
log.Infov(c, log.KV("method", "RecVideoData"), log.KV("time", time.Now().UnixNano()-time1), log.KV("total", res.Total), log.KV("list", len(res.List)))
return
}
//VideoData 获取视频信息,给mis端使用
func (s *Service) VideoData(c context.Context, req *v1.VideoDataRequest) (res *v1.VideoDataResponse, err error) {
params := new(model.Query)
jsoniter.Unmarshal([]byte(req.Query), params)
boolQuery := elastic.NewBoolQuery()
if params.Where != nil {
if params.Where.In != nil {
for k, v := range params.Where.In {
boolQuery.Must(elastic.NewTermsQuery(k, v...))
}
}
if params.Where.NotIn != nil {
for k, v := range params.Where.NotIn {
boolQuery.MustNot(elastic.NewTermsQuery(k, v...))
}
}
if params.Where.Lte != nil {
for k, v := range params.Where.Lte {
r := elastic.NewRangeQuery(k)
r.Lte(v)
boolQuery.Must(r)
}
}
if params.Where.Gte != nil {
for k, v := range params.Where.Gte {
fmt.Println(k, v)
r := elastic.NewRangeQuery(k)
r.Gte(v)
boolQuery.Must(r)
}
}
}
size := 10
if params.Size > 0 {
size = params.Size
}
res = new(v1.VideoDataResponse)
if res.Total, res.List, err = s.dao.VideoData(c, boolQuery, params.From, size); err != nil {
err = ecode.SearchVideoDataErr
}
return
}
// ESVideoData es原生查找
func (s *Service) ESVideoData(c context.Context, req *v1.ESVideoDataRequest) (res *v1.ESVideoDataResponse, err error) {
res = new(v1.ESVideoDataResponse)
if res.Total, res.List, err = s.dao.ESVideoData(c, req.Query); err != nil {
err = ecode.SearchVideoDataErr
}
return
}
// DelVideoBySVID 批量删除视频
func (s *Service) DelVideoBySVID(c context.Context, req *v1.DelVideoBySVIDRequest) (res *v1.DelVideoBySVIDResponse, err error) {
res = new(v1.DelVideoBySVIDResponse)
err = nil
if len(req.SVIDs) == 0 {
return
}
for _, svid := range req.SVIDs {
s.dao.DelVideoDataBySVID(c, svid)
}
return
}