mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Backport https://github.com/go-gitea/gitea/pull/29740 (based on #29671 ...)
This commit is contained in:
		@@ -5,6 +5,7 @@ package meilisearch
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -210,7 +211,11 @@ func (b *Indexer) Search(ctx context.Context, options *internal.SearchOptions) (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	skip, limit := indexer_internal.ParsePaginator(options.Paginator, maxTotalHits)
 | 
						skip, limit := indexer_internal.ParsePaginator(options.Paginator, maxTotalHits)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	searchRes, err := b.inner.Client.Index(b.inner.VersionedIndexName()).Search(options.Keyword, &meilisearch.SearchRequest{
 | 
						// to make it non fuzzy ("typo tolerance" in meilisearch terms), we have to quote the keyword(s)
 | 
				
			||||||
 | 
						// https://www.meilisearch.com/docs/reference/api/search#phrase-search
 | 
				
			||||||
 | 
						keyword := doubleQuoteKeyword(options.Keyword)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						searchRes, err := b.inner.Client.Index(b.inner.VersionedIndexName()).Search(keyword, &meilisearch.SearchRequest{
 | 
				
			||||||
		Filter:           query.Statement(),
 | 
							Filter:           query.Statement(),
 | 
				
			||||||
		Limit:            int64(limit),
 | 
							Limit:            int64(limit),
 | 
				
			||||||
		Offset:           int64(skip),
 | 
							Offset:           int64(skip),
 | 
				
			||||||
@@ -241,3 +246,16 @@ func parseSortBy(sortBy internal.SortBy) string {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return field + ":asc"
 | 
						return field + ":asc"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func doubleQuoteKeyword(k string) string {
 | 
				
			||||||
 | 
						kp := strings.Split(k, " ")
 | 
				
			||||||
 | 
						parts := 0
 | 
				
			||||||
 | 
						for i := range kp {
 | 
				
			||||||
 | 
							part := strings.Trim(kp[i], "\"")
 | 
				
			||||||
 | 
							if part != "" {
 | 
				
			||||||
 | 
								kp[parts] = fmt.Sprintf(`"%s"`, part)
 | 
				
			||||||
 | 
								parts++
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return strings.Join(kp[:parts], " ")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,8 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/modules/indexer/issues/internal/tests"
 | 
						"code.gitea.io/gitea/modules/indexer/issues/internal/tests"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/stretchr/testify/assert"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestMeilisearchIndexer(t *testing.T) {
 | 
					func TestMeilisearchIndexer(t *testing.T) {
 | 
				
			||||||
@@ -48,3 +50,11 @@ func TestMeilisearchIndexer(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	tests.TestIndexer(t, indexer)
 | 
						tests.TestIndexer(t, indexer)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDoubleQuoteKeyword(t *testing.T) {
 | 
				
			||||||
 | 
						assert.EqualValues(t, "", doubleQuoteKeyword(""))
 | 
				
			||||||
 | 
						assert.EqualValues(t, `"a" "b" "c"`, doubleQuoteKeyword("a b c"))
 | 
				
			||||||
 | 
						assert.EqualValues(t, `"a" "d" "g"`, doubleQuoteKeyword("a  d g"))
 | 
				
			||||||
 | 
						assert.EqualValues(t, `"a" "d" "g"`, doubleQuoteKeyword("a  d g"))
 | 
				
			||||||
 | 
						assert.EqualValues(t, `"a" "d" "g"`, doubleQuoteKeyword(`a  "" "d" """g`))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user