diff options
Diffstat (limited to 'modules/indexer/repo.go')
-rw-r--r-- | modules/indexer/repo.go | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/modules/indexer/repo.go b/modules/indexer/repo.go index ffb1dc1e62..4d1e792152 100644 --- a/modules/indexer/repo.go +++ b/modules/indexer/repo.go @@ -16,6 +16,7 @@ import ( "github.com/blevesearch/bleve/analysis/token/lowercase" "github.com/blevesearch/bleve/analysis/token/unique" "github.com/blevesearch/bleve/analysis/tokenizer/unicode" + "github.com/blevesearch/bleve/search/query" "github.com/ethantkoenig/rupture" ) @@ -158,6 +159,7 @@ func DeleteRepoFromIndexer(repoID int64) error { // RepoSearchResult result of performing a search in a repo type RepoSearchResult struct { + RepoID int64 StartIndex int EndIndex int Filename string @@ -166,17 +168,29 @@ type RepoSearchResult struct { // SearchRepoByKeyword searches for files in the specified repo. // Returns the matching file-paths -func SearchRepoByKeyword(repoID int64, keyword string, page, pageSize int) (int64, []*RepoSearchResult, error) { +func SearchRepoByKeyword(repoIDs []int64, keyword string, page, pageSize int) (int64, []*RepoSearchResult, error) { phraseQuery := bleve.NewMatchPhraseQuery(keyword) phraseQuery.FieldVal = "Content" phraseQuery.Analyzer = repoIndexerAnalyzer - indexerQuery := bleve.NewConjunctionQuery( - numericEqualityQuery(repoID, "RepoID"), - phraseQuery, - ) + + var indexerQuery query.Query + if len(repoIDs) > 0 { + var repoQueries = make([]query.Query, 0, len(repoIDs)) + for _, repoID := range repoIDs { + repoQueries = append(repoQueries, numericEqualityQuery(repoID, "RepoID")) + } + + indexerQuery = bleve.NewConjunctionQuery( + bleve.NewDisjunctionQuery(repoQueries...), + phraseQuery, + ) + } else { + indexerQuery = phraseQuery + } + from := (page - 1) * pageSize searchRequest := bleve.NewSearchRequestOptions(indexerQuery, pageSize, from, false) - searchRequest.Fields = []string{"Content"} + searchRequest.Fields = []string{"Content", "RepoID"} searchRequest.IncludeLocations = true result, err := repoIndexer.Search(searchRequest) @@ -199,6 +213,7 @@ func SearchRepoByKeyword(repoID int64, keyword string, page, pageSize int) (int6 } } searchResults[i] = &RepoSearchResult{ + RepoID: int64(hit.Fields["RepoID"].(float64)), StartIndex: startIndex, EndIndex: endIndex, Filename: filenameOfIndexerID(hit.ID), |