diff --git a/modules/indexer/issues/bleve.go b/modules/indexer/issues/bleve.go index c298b7de3e1b0..df6054b222c9e 100644 --- a/modules/indexer/issues/bleve.go +++ b/modules/indexer/issues/bleve.go @@ -28,7 +28,7 @@ import ( const ( issueIndexerAnalyzer = "issueIndexer" issueIndexerDocType = "issueIndexerDocType" - issueIndexerLatestVersion = 1 + issueIndexerLatestVersion = 2 ) // indexerID a bleve-compatible unique identifier for an integer id @@ -128,6 +128,7 @@ func createIssueIndexer(path string, latestVersion int) (bleve.Index, error) { docMapping.AddFieldMappingsAt("Title", textFieldMapping) docMapping.AddFieldMappingsAt("Content", textFieldMapping) docMapping.AddFieldMappingsAt("Comments", textFieldMapping) + docMapping.AddFieldMappingsAt("Index", numericFieldMapping) if err := addUnicodeNormalizeTokenFilter(mapping); err != nil { return nil, err @@ -214,11 +215,13 @@ func (b *BleveIndexer) Index(issues []*IndexerData) error { Title string Content string Comments []string + Index int64 }{ RepoID: issue.RepoID, Title: issue.Title, Content: issue.Content, Comments: issue.Comments, + Index: issue.Index, }); err != nil { return err } @@ -244,6 +247,7 @@ func (b *BleveIndexer) Search(ctx context.Context, keyword string, repoIDs []int for _, repoID := range repoIDs { repoQueriesP = append(repoQueriesP, numericEqualityQuery(repoID, "RepoID")) } + index, _ := strconv.ParseInt(keyword, 10, 64) repoQueries := make([]query.Query, len(repoQueriesP)) for i, v := range repoQueriesP { repoQueries[i] = query.Query(v) @@ -252,6 +256,7 @@ func (b *BleveIndexer) Search(ctx context.Context, keyword string, repoIDs []int indexerQuery := bleve.NewConjunctionQuery( bleve.NewDisjunctionQuery(repoQueries...), bleve.NewDisjunctionQuery( + numericEqualityQuery(index, "Index"), newMatchPhraseQuery(keyword, "Title", issueIndexerAnalyzer), newMatchPhraseQuery(keyword, "Content", issueIndexerAnalyzer), newMatchPhraseQuery(keyword, "Comments", issueIndexerAnalyzer), diff --git a/modules/indexer/issues/bleve_test.go b/modules/indexer/issues/bleve_test.go index 926c32e242e8e..7631513e795a6 100644 --- a/modules/indexer/issues/bleve_test.go +++ b/modules/indexer/issues/bleve_test.go @@ -40,6 +40,7 @@ func TestBleveIndexAndSearch(t *testing.T) { "test1", "test2", }, + Index: 1, }, { ID: 2, @@ -50,6 +51,7 @@ func TestBleveIndexAndSearch(t *testing.T) { "LGTM", "Good idea", }, + Index: 14, }, }) assert.NoError(t, err) @@ -82,6 +84,10 @@ func TestBleveIndexAndSearch(t *testing.T) { Keyword: "help", IDs: []int64{}, }, + { + Keyword: "14", + IDs: []int64{2}, + }, } for _, kw := range keywords { diff --git a/modules/indexer/issues/elastic_search.go b/modules/indexer/issues/elastic_search.go index 97e32b89753be..8e92830a705e4 100644 --- a/modules/indexer/issues/elastic_search.go +++ b/modules/indexer/issues/elastic_search.go @@ -110,6 +110,10 @@ const ( "type" : "text", "index": true } + "index": { + "type": "integer", + "index": true + }, } } }` @@ -168,6 +172,7 @@ func (b *ElasticSearchIndexer) Index(issues []*IndexerData) error { "title": issue.Title, "content": issue.Content, "comments": issue.Comments, + "index": issue.Index, }). Do(graceful.GetManager().HammerContext()) return b.checkError(err) @@ -185,6 +190,7 @@ func (b *ElasticSearchIndexer) Index(issues []*IndexerData) error { "title": issue.Title, "content": issue.Content, "comments": issue.Comments, + "index": issue.Index, }), ) } @@ -227,7 +233,7 @@ func (b *ElasticSearchIndexer) Delete(ids ...int64) error { // Search searches for issues by given conditions. // Returns the matching issue IDs func (b *ElasticSearchIndexer) Search(ctx context.Context, keyword string, repoIDs []int64, limit, start int) (*SearchResult, error) { - kwQuery := elastic.NewMultiMatchQuery(keyword, "title", "content", "comments") + kwQuery := elastic.NewMultiMatchQuery(keyword, "title", "content", "comments", "index") query := elastic.NewBoolQuery() query = query.Must(kwQuery) if len(repoIDs) > 0 { diff --git a/modules/indexer/issues/indexer.go b/modules/indexer/issues/indexer.go index 3aaa27eed213b..a26c915091d68 100644 --- a/modules/indexer/issues/indexer.go +++ b/modules/indexer/issues/indexer.go @@ -30,6 +30,7 @@ type IndexerData struct { Comments []string `json:"comments"` IsDelete bool `json:"is_delete"` IDs []int64 `json:"ids"` + Index int64 `json:"index"` } // Match represents on search result @@ -340,6 +341,7 @@ func UpdateIssueIndexer(issue *models.Issue) { Title: issue.Title, Content: issue.Content, Comments: comments, + Index: issue.Index, } log.Debug("Adding to channel: %v", indexerData) if err := issueIndexerQueue.Push(indexerData); err != nil {