add nspath filter of recommend api
This commit is contained in:
parent
941d521328
commit
36e196bedd
9
main.go
9
main.go
|
|
@ -152,7 +152,14 @@ func main() {
|
||||||
// panic(err)
|
// panic(err)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
err := model.CleanupRecommendRedisCache(ctx)
|
cacheMap, err := model.GetNSpathToIsLocalMap(ctx, postgresDBClient)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error(ctx, "get nspath to is_local map failed", "error", err)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
model.NSPathToIsLocalMap = cacheMap
|
||||||
|
|
||||||
|
err = model.CleanupRecommendRedisCache(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(ctx, "clean up component measurement and attribute group failed", "error", err)
|
logger.Error(ctx, "clean up component measurement and attribute group failed", "error", err)
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
// Package model define model struct of model runtime service
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"modelRT/logger"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
var NSPathToIsLocalMap map[string]bool
|
||||||
|
|
||||||
|
// ComponentStationRelation define struct to hold component nspath and station is_local fields
|
||||||
|
type ComponentStationRelation struct {
|
||||||
|
NSPath string `gorm:"column:nspath"`
|
||||||
|
IsLocal bool `gorm:"column:is_local"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetNSpathToIsLocalMap define func to get component nspath to station is_local map
|
||||||
|
func GetNSpathToIsLocalMap(ctx context.Context, db *gorm.DB) (map[string]bool, error) {
|
||||||
|
var results []ComponentStationRelation
|
||||||
|
nspathMap := make(map[string]bool)
|
||||||
|
|
||||||
|
err := db.Table("component").
|
||||||
|
Select("component.nspath, station.is_local").
|
||||||
|
Joins("join station on component.station_id = station.id").
|
||||||
|
Scan(&results).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error(ctx, "query nspath and is_local relationship failed", "err", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, res := range results {
|
||||||
|
if res.NSPath != "" {
|
||||||
|
nspathMap[res.NSPath] = res.IsLocal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nspathMap, nil
|
||||||
|
}
|
||||||
|
|
@ -116,13 +116,26 @@ func RedisSearchRecommend(ctx context.Context, input string) map[string]SearchRe
|
||||||
for range 2 {
|
for range 2 {
|
||||||
result := <-fanInChan
|
result := <-fanInChan
|
||||||
if result.Err != nil {
|
if result.Err != nil {
|
||||||
logger.Error(ctx, "return all keys at the special level from redis failed", "query_key", result.RecommendType, "error", result.Err)
|
logger.Error(ctx, "return all keys at the special level from redis failed", "recommend_type", result.RecommendType, "error", result.Err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if result.RecommendType == constants.CompNSPathRecommendHierarchyType {
|
if result.RecommendType == constants.CompNSPathRecommendHierarchyType {
|
||||||
|
filterResults := make([]string, 0, len(result.QueryDatas))
|
||||||
// TODO 增加 nspath 过滤
|
// TODO 增加 nspath 过滤
|
||||||
fmt.Println("process nspath")
|
for _, queryData := range result.QueryDatas {
|
||||||
|
var nsPath string
|
||||||
|
if lastDotIndex := strings.LastIndex(queryData, "."); lastDotIndex == -1 {
|
||||||
|
nsPath = queryData
|
||||||
|
} else {
|
||||||
|
nsPath = queryData[lastDotIndex+1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
if isLocal, ok := NSPathToIsLocalMap[nsPath]; ok && isLocal {
|
||||||
|
filterResults = append(filterResults, queryData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.QueryDatas = filterResults
|
||||||
}
|
}
|
||||||
results[result.RecommendType.String()] = result
|
results[result.RecommendType.String()] = result
|
||||||
}
|
}
|
||||||
|
|
@ -150,9 +163,23 @@ func RedisSearchRecommend(ctx context.Context, input string) map[string]SearchRe
|
||||||
logger.Error(ctx, "exec redis fuzzy search by key failed", "recommend_type", result.RecommendType, "error", result.Err)
|
logger.Error(ctx, "exec redis fuzzy search by key failed", "recommend_type", result.RecommendType, "error", result.Err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if result.RecommendType == constants.CompNSPathRecommendHierarchyType {
|
if result.RecommendType == constants.CompNSPathRecommendHierarchyType {
|
||||||
|
filterResults := make([]string, 0, len(result.QueryDatas))
|
||||||
// TODO 增加 nspath 过滤
|
// TODO 增加 nspath 过滤
|
||||||
fmt.Println("process nspath")
|
for _, queryData := range result.QueryDatas {
|
||||||
|
var nsPath string
|
||||||
|
if lastDotIndex := strings.LastIndex(queryData, "."); lastDotIndex == -1 {
|
||||||
|
nsPath = queryData
|
||||||
|
} else {
|
||||||
|
nsPath = queryData[lastDotIndex+1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
if isLocal, ok := NSPathToIsLocalMap[nsPath]; ok && isLocal {
|
||||||
|
filterResults = append(filterResults, queryData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.QueryDatas = filterResults
|
||||||
}
|
}
|
||||||
results[result.RecommendType.String()] = result
|
results[result.RecommendType.String()] = result
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue