| @@ -98,19 +98,81 @@ func searchRepoByLabel(ctx *context.Context, Key string, Page int, PageSize int) | |||
| if SortBy == "" { | |||
| SortBy = "updated_unix.keyword" | |||
| } | |||
| PrivateTotal := ctx.QueryInt("PrivateTotal") | |||
| WebTotal := ctx.QueryInt("WebTotal") | |||
| ascending := ctx.QueryBool("Ascending") | |||
| from := (Page - 1) * PageSize | |||
| resultObj := &SearchRes{} | |||
| log.Info("WebTotal=" + fmt.Sprint(WebTotal)) | |||
| log.Info("PrivateTotal=" + fmt.Sprint(PrivateTotal)) | |||
| 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, | |||
| TopicOnly: true, | |||
| TopicName: 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 | |||
| } | |||
| } else { | |||
| resultObj.PrivateTotal = int64(PrivateTotal) | |||
| } | |||
| from = from - PrivateTotal | |||
| if from < 0 { | |||
| from = 0 | |||
| } | |||
| Size := PageSize - len(resultObj.Result) | |||
| log.Info("query searchRepoByLabel start") | |||
| if Key != "" { | |||
| boolQ := elastic.NewBoolQuery() | |||
| topicsQuery := elastic.NewMatchQuery("topics", Key) | |||
| boolQ.Should(topicsQuery) | |||
| res, err := client.Search("repository-es-index").Query(boolQ).SortBy(elastic.NewScoreSort(), elastic.NewFieldSort(SortBy).Order(ascending)).From((Page - 1) * PageSize).Size(PageSize).Highlight(queryHighlight("topics")).Do(ctx.Req.Context()) | |||
| res, err := client.Search("repository-es-index").Query(boolQ).SortBy(elastic.NewScoreSort(), elastic.NewFieldSort(SortBy).Order(ascending)).From(from).Size(Size).Highlight(queryHighlight("topics")).Do(ctx.Req.Context()) | |||
| if err == nil { | |||
| searchJson, _ := json.Marshal(res) | |||
| log.Info("searchJson=" + string(searchJson)) | |||
| result := makeRepoResult(res, "", false) | |||
| ctx.JSON(200, result) | |||
| esresult := makeRepoResult(res, "", false) | |||
| resultObj.Total = resultObj.PrivateTotal + esresult.Total | |||
| resultObj.Result = append(resultObj.Result, esresult.Result...) | |||
| ctx.JSON(200, esresult) | |||
| } else { | |||
| log.Info("query es error," + err.Error()) | |||
| ctx.JSON(200, "") | |||