|
|
|
@@ -18,9 +18,6 @@ type SearchRes struct { |
|
|
|
Total int64 |
|
|
|
Result []map[string]interface{} |
|
|
|
PrivateTotal int64 |
|
|
|
PrivatePage int |
|
|
|
PublicPage int |
|
|
|
PublicTotal int64 |
|
|
|
} |
|
|
|
|
|
|
|
var client *elastic.Client |
|
|
|
@@ -141,44 +138,62 @@ func searchRepo(ctx *context.Context, TableName string, Key string, Page int, Pa |
|
|
|
if SortBy == "" { |
|
|
|
SortBy = "updated_unix.keyword" |
|
|
|
} |
|
|
|
PrivateTotal := ctx.QueryInt("PrivateTotal") |
|
|
|
WebTotal := ctx.QueryInt("WebTotal") |
|
|
|
ascending := ctx.QueryBool("Ascending") |
|
|
|
orderBy := models.SearchOrderByRecentUpdated |
|
|
|
switch SortBy { |
|
|
|
case "updated_unix.keyword": |
|
|
|
orderBy = models.SearchOrderByRecentUpdated |
|
|
|
case "num_stars": |
|
|
|
orderBy = models.SearchOrderByStarsReverse |
|
|
|
case "num_forks": |
|
|
|
orderBy = models.SearchOrderByForksReverse |
|
|
|
case "num_watches": |
|
|
|
orderBy = models.SearchOrderByWatches |
|
|
|
} |
|
|
|
log.Info("actor is null?:" + fmt.Sprint(ctx.User == nil)) |
|
|
|
repos, count, err := models.SearchRepository(&models.SearchRepoOptions{ |
|
|
|
ListOptions: models.ListOptions{ |
|
|
|
Page: Page, |
|
|
|
PageSize: PageSize, |
|
|
|
}, |
|
|
|
Actor: ctx.User, |
|
|
|
OrderBy: orderBy, |
|
|
|
Private: true, |
|
|
|
OnlyPrivate: true, |
|
|
|
Keyword: Key, |
|
|
|
IncludeDescription: setting.UI.SearchRepoDescription, |
|
|
|
}) |
|
|
|
if err != nil { |
|
|
|
ctx.ServerError("SearchRepository", err) |
|
|
|
return |
|
|
|
from := (Page - 1) * PageSize |
|
|
|
resultObj := &SearchRes{} |
|
|
|
|
|
|
|
resultObj.Result = make([]map[string]interface{}, 0) |
|
|
|
|
|
|
|
if from < PrivateTotal || from == 0 { |
|
|
|
orderBy := models.SearchOrderByRecentUpdated |
|
|
|
switch SortBy { |
|
|
|
case "updated_unix.keyword": |
|
|
|
orderBy = models.SearchOrderByRecentUpdated |
|
|
|
case "num_stars": |
|
|
|
orderBy = models.SearchOrderByStarsReverse |
|
|
|
case "num_forks": |
|
|
|
orderBy = models.SearchOrderByForksReverse |
|
|
|
case "num_watches": |
|
|
|
orderBy = models.SearchOrderByWatches |
|
|
|
} |
|
|
|
log.Info("actor is null?:" + fmt.Sprint(ctx.User == nil)) |
|
|
|
repos, count, err := models.SearchRepository(&models.SearchRepoOptions{ |
|
|
|
ListOptions: models.ListOptions{ |
|
|
|
Page: Page, |
|
|
|
PageSize: PageSize, |
|
|
|
}, |
|
|
|
Actor: ctx.User, |
|
|
|
OrderBy: orderBy, |
|
|
|
Private: true, |
|
|
|
OnlyPrivate: true, |
|
|
|
Keyword: Key, |
|
|
|
IncludeDescription: setting.UI.SearchRepoDescription, |
|
|
|
}) |
|
|
|
if err != nil { |
|
|
|
ctx.JSON(200, "") |
|
|
|
return |
|
|
|
} |
|
|
|
resultObj.PrivateTotal = count |
|
|
|
if repos.Len() > 0 { |
|
|
|
log.Info("Query private repo number is:" + fmt.Sprint(repos.Len())) |
|
|
|
makePrivateRepo(repos, resultObj, Key) |
|
|
|
} else { |
|
|
|
log.Info("not found private repo,keyword=" + Key) |
|
|
|
} |
|
|
|
if repos.Len() >= PageSize { |
|
|
|
resultObj.Total = int64(WebTotal) |
|
|
|
ctx.JSON(200, resultObj) |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
privateRe := &SearchRes{} |
|
|
|
privateRe.PrivateTotal = count |
|
|
|
privateRe.Result = make([]map[string]interface{}, 0) |
|
|
|
if count > 0 { |
|
|
|
log.Info("Query private repo number is:" + fmt.Sprint(count)) |
|
|
|
makePrivateRepo(repos, privateRe, Key) |
|
|
|
} else { |
|
|
|
log.Info("not found private repo,keyword=" + Key) |
|
|
|
|
|
|
|
from = from - PrivateTotal |
|
|
|
if from < 0 { |
|
|
|
from = 0 |
|
|
|
} |
|
|
|
Size := PageSize - len(resultObj.Result) |
|
|
|
|
|
|
|
log.Info("query searchRepo start") |
|
|
|
if Key != "" { |
|
|
|
@@ -187,12 +202,14 @@ func searchRepo(ctx *context.Context, TableName string, Key string, Page int, Pa |
|
|
|
descriptionQuery := elastic.NewMatchQuery("description", Key).Boost(1.5).QueryName("f_second") |
|
|
|
topicsQuery := elastic.NewMatchQuery("topics", Key).Boost(1).QueryName("f_third") |
|
|
|
boolQ.Should(nameQuery, descriptionQuery, topicsQuery) |
|
|
|
res, err := client.Search(TableName).Query(boolQ).SortBy(elastic.NewScoreSort(), elastic.NewFieldSort(SortBy).Order(ascending)).From((Page - 1) * PageSize).Size(PageSize).Highlight(queryHighlight("alias", "description", "topics")).Do(ctx.Req.Context()) |
|
|
|
res, err := client.Search(TableName).Query(boolQ).SortBy(elastic.NewScoreSort(), elastic.NewFieldSort(SortBy).Order(ascending)).From(from).Size(Size).Highlight(queryHighlight("alias", "description", "topics")).Do(ctx.Req.Context()) |
|
|
|
if err == nil { |
|
|
|
searchJson, _ := json.Marshal(res) |
|
|
|
log.Info("searchJson=" + string(searchJson)) |
|
|
|
result := makeRepoResult(res, Key, OnlyReturnNum) |
|
|
|
ctx.JSON(200, result) |
|
|
|
esresult := makeRepoResult(res, Key, OnlyReturnNum) |
|
|
|
resultObj.Total = resultObj.PrivateTotal + esresult.Total |
|
|
|
resultObj.Result = append(resultObj.Result, esresult.Result...) |
|
|
|
ctx.JSON(200, resultObj) |
|
|
|
} else { |
|
|
|
log.Info("query es error," + err.Error()) |
|
|
|
ctx.JSON(200, "") |
|
|
|
@@ -200,12 +217,14 @@ func searchRepo(ctx *context.Context, TableName string, Key string, Page int, Pa |
|
|
|
} else { |
|
|
|
log.Info("query all content.") |
|
|
|
//搜索的属性要指定{"timestamp":{"unmapped_type":"date"}} |
|
|
|
res, err := client.Search(TableName).SortBy(elastic.NewFieldSort(SortBy).Order(ascending)).From((Page - 1) * PageSize).Size(PageSize).Do(ctx.Req.Context()) |
|
|
|
res, err := client.Search(TableName).SortBy(elastic.NewFieldSort(SortBy).Order(ascending)).From(from).Size(Size).Do(ctx.Req.Context()) |
|
|
|
if err == nil { |
|
|
|
searchJson, _ := json.Marshal(res) |
|
|
|
log.Info("searchJson=" + string(searchJson)) |
|
|
|
result := makeRepoResult(res, "", OnlyReturnNum) |
|
|
|
ctx.JSON(200, result) |
|
|
|
esresult := makeRepoResult(res, "", OnlyReturnNum) |
|
|
|
resultObj.Total = resultObj.PrivateTotal + esresult.Total |
|
|
|
resultObj.Result = append(resultObj.Result, esresult.Result...) |
|
|
|
ctx.JSON(200, resultObj) |
|
|
|
} else { |
|
|
|
log.Info("query es error," + err.Error()) |
|
|
|
ctx.JSON(200, "") |
|
|
|
|