From cf2a077e0de4de7b9c6e937081337b09633fe576 Mon Sep 17 00:00:00 2001 From: puni9869 Date: Sun, 7 Jun 2026 13:20:03 +0530 Subject: [PATCH] fix: adding indexer for assignee_ids --- modules/indexer/issues/bleve/bleve.go | 17 ++++++++++++++--- modules/indexer/issues/internal/model.go | 1 + modules/indexer/issues/util.go | 7 ++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/modules/indexer/issues/bleve/bleve.go b/modules/indexer/issues/bleve/bleve.go index a919317728d..684808ca016 100644 --- a/modules/indexer/issues/bleve/bleve.go +++ b/modules/indexer/issues/bleve/bleve.go @@ -27,7 +27,7 @@ import ( const ( issueIndexerAnalyzer = "issueIndexer" issueIndexerDocType = "issueIndexerDocType" - issueIndexerLatestVersion = 6 + issueIndexerLatestVersion = 7 ) const unicodeNormalizeName = "unicodeNormalize" @@ -87,6 +87,7 @@ func generateIssueIndexMapping() (mapping.IndexMapping, error) { docMapping.AddFieldMappingsAt("no_project", boolFieldMapping) docMapping.AddFieldMappingsAt("poster_id", numberFieldMapping) docMapping.AddFieldMappingsAt("assignee_id", numberFieldMapping) + docMapping.AddFieldMappingsAt("assignee_ids", numberFieldMapping) docMapping.AddFieldMappingsAt("mention_ids", numberFieldMapping) docMapping.AddFieldMappingsAt("reviewed_ids", numberFieldMapping) docMapping.AddFieldMappingsAt("review_requested_ids", numberFieldMapping) @@ -260,11 +261,21 @@ func (b *Indexer) Search(ctx context.Context, options *internal.SearchOptions) ( if options.AssigneeID != "" { if options.AssigneeID == "(any)" { - queries = append(queries, inner_bleve.NumericRangeInclusiveQuery(optional.Some[int64](1), optional.None[int64](), "assignee_id")) + queries = append(queries, bleve.NewDisjunctionQuery( + inner_bleve.NumericRangeInclusiveQuery(optional.Some[int64](1), optional.None[int64](), "assignee_ids"), + inner_bleve.NumericRangeInclusiveQuery(optional.Some[int64](1), optional.None[int64](), "assignee_id"), + )) } else { // "(none)" becomes 0, it means no assignee assigneeIDInt64, _ := strconv.ParseInt(options.AssigneeID, 10, 64) - queries = append(queries, inner_bleve.NumericEqualityQuery(assigneeIDInt64, "assignee_id")) + if options.AssigneeID == "(none)" { + queries = append(queries, inner_bleve.NumericEqualityQuery(assigneeIDInt64, "assignee_id")) + } else { + queries = append(queries, bleve.NewDisjunctionQuery( + inner_bleve.NumericEqualityQuery(assigneeIDInt64, "assignee_ids"), + inner_bleve.NumericEqualityQuery(assigneeIDInt64, "assignee_id"), + )) + } } } diff --git a/modules/indexer/issues/internal/model.go b/modules/indexer/issues/internal/model.go index b964f349df4..a48adb3c607 100644 --- a/modules/indexer/issues/internal/model.go +++ b/modules/indexer/issues/internal/model.go @@ -35,6 +35,7 @@ type IndexerData struct { ProjectColumnMap map[int64]int64 `json:"project_column_map,omitempty"` // Maps project ID to column ID for each project the issue is in PosterID int64 `json:"poster_id"` AssigneeID int64 `json:"assignee_id"` + AssigneeIDs []int64 `json:"assignee_ids"` MentionIDs []int64 `json:"mention_ids"` ReviewedIDs []int64 `json:"reviewed_ids"` ReviewRequestedIDs []int64 `json:"review_requested_ids"` diff --git a/modules/indexer/issues/util.go b/modules/indexer/issues/util.go index bbfd42be6b9..58bc9dce820 100644 --- a/modules/indexer/issues/util.go +++ b/modules/indexer/issues/util.go @@ -7,7 +7,6 @@ import ( "context" "errors" "fmt" - "gitea.dev/models/db" issue_model "gitea.dev/models/issues" "gitea.dev/modules/container" @@ -87,6 +86,11 @@ func getIssueIndexerData(ctx context.Context, issueID int64) (*internal.IndexerD return nil, false, err } + assigneeIDs, err := issue_model.GetAssigneeIDsByIssue(ctx, issue.ID) + if err != nil { + return nil, false, err + } + projectIDs := make([]int64, 0, len(issue.Projects)) for _, project := range issue.Projects { projectIDs = append(projectIDs, project.ID) @@ -113,6 +117,7 @@ func getIssueIndexerData(ctx context.Context, issueID int64) (*internal.IndexerD NoProject: len(projectIDs) == 0, PosterID: issue.PosterID, AssigneeID: issue.AssigneeID, + AssigneeIDs: assigneeIDs, MentionIDs: mentionIDs, ReviewedIDs: reviewedIDs, ReviewRequestedIDs: reviewRequestedIDs,