mirror of https://github.com/go-gitea/gitea.git
Backport https://github.com/go-gitea/gitea/pull/29740 (based on #29671 ...)
This commit is contained in:
parent
47dc4598a3
commit
0cbbcf20e3
|
@ -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`))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue