summaryrefslogtreecommitdiffstats
path: root/modules/indexer
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2018-03-16 22:04:33 +0800
committerGitHub <noreply@github.com>2018-03-16 22:04:33 +0800
commit9e5d0a09eb7370daedb1cf572d25ffa150eacf17 (patch)
treef39cbf6a572bda0e82caec7ef1697ceb70e37f1e /modules/indexer
parent4163cdf3ea6d6ca43b694de0c15cc93659d6c2b3 (diff)
downloadgitea-9e5d0a09eb7370daedb1cf572d25ffa150eacf17.tar.gz
gitea-9e5d0a09eb7370daedb1cf572d25ffa150eacf17.zip
Global code search support (#3664)
* add global code search on explore * fix bug when no anyone public repos * change the icon * fix typo and add UnitTypeCode check for login non-admin user * fix ui description when no match
Diffstat (limited to 'modules/indexer')
-rw-r--r--modules/indexer/repo.go27
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),