cache: only FTS index token < 100 characters

Michael Muré created

Change summary

cache/repo_cache_bug.go | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)

Detailed changes

cache/repo_cache_bug.go 🔗

@@ -8,12 +8,14 @@ import (
 	"sort"
 	"strings"
 	"time"
+	"unicode/utf8"
+
+	"github.com/blevesearch/bleve"
 
 	"github.com/MichaelMure/git-bug/bug"
 	"github.com/MichaelMure/git-bug/entity"
 	"github.com/MichaelMure/git-bug/query"
 	"github.com/MichaelMure/git-bug/repository"
-	"github.com/blevesearch/bleve"
 )
 
 const (
@@ -479,11 +481,24 @@ func (c *RepoCache) addBugToSearchIndex(snap *bug.Snapshot) error {
 		Text []string
 	}{}
 
+	// See https://github.com/blevesearch/bleve/issues/1576
+	var sb strings.Builder
+	normalize := func(text string) string {
+		sb.Reset()
+		for _, field := range strings.Fields(text) {
+			if utf8.RuneCountInString(field) < 100 {
+				sb.WriteString(field)
+				sb.WriteRune(' ')
+			}
+		}
+		return sb.String()
+	}
+
 	for _, comment := range snap.Comments {
-		searchableBug.Text = append(searchableBug.Text, comment.Message)
+		searchableBug.Text = append(searchableBug.Text, normalize(comment.Message))
 	}
 
-	searchableBug.Text = append(searchableBug.Text, snap.Title)
+	searchableBug.Text = append(searchableBug.Text, normalize(snap.Title))
 
 	index, err := c.repo.GetBleveIndex("bug")
 	if err != nil {