fix(search): query parser bug (#423)

This commit is contained in:
mgdigital 2025-05-11 13:32:43 +01:00 committed by GitHub
parent f196dc1dd9
commit 0486d0e990
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 16 additions and 15 deletions

View File

@ -116,15 +116,13 @@ outer:
}
token := tokens[i]
addExpr := func(expr string) {
switch operator {
case OperatorAnd:
parts = append(parts, "&")
case OperatorOr:
parts = append(parts, "|")
case OperatorFollowedBy:
parts = append(parts, "<->")
default:
if len(parts) > 0 {
if len(parts) > 0 {
switch operator {
case OperatorOr:
parts = append(parts, "|")
case OperatorFollowedBy:
parts = append(parts, "<->")
default:
parts = append(parts, "&")
}
}

View File

@ -1,8 +1,9 @@
package fts
package fts_test
import (
"testing"
"github.com/bitmagnet-io/bitmagnet/internal/database/fts"
"github.com/stretchr/testify/assert"
)
@ -32,11 +33,12 @@ func TestAppQueryToTsquery(t *testing.T) {
{"Chinese", "给我做一个三明治", "Gei <-> Wo <-> Zuo <-> Yi <-> Ge <-> San <-> Ming <-> Zhi"},
{"Arabic", "اصنع لي شطيرة", "'Sn`' & ly & 'shTyr@'"},
{"Arabic (quoted)", "\"اصنع لي شطيرة\"", "'Sn`' <-> ly <-> 'shTyr@'"},
{"ampersand prefix", "&eacute;", "eacute"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
assert.Equal(t, tt.want, AppQueryToTsquery(tt.input))
assert.Equal(t, tt.want, fts.AppQueryToTsquery(tt.input))
})
}
}

View File

@ -1,8 +1,9 @@
package fts
package fts_test
import (
"testing"
"github.com/bitmagnet-io/bitmagnet/internal/database/fts"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@ -12,12 +13,12 @@ func TestParseTsvector(t *testing.T) {
tests := []struct {
input string
wantTsv Tsvector
wantTsv fts.Tsvector
wantStr string
}{
{
input: " 'a':1A bb:2b 'cc ccc':3C 'dD''Dd''':4D e a bb:5 ",
wantTsv: Tsvector{
wantTsv: fts.Tsvector{
"a": {
1: 'A',
},
@ -40,7 +41,7 @@ func TestParseTsvector(t *testing.T) {
t.Run(test.input, func(t *testing.T) {
t.Parallel()
got, err := ParseTsvector(test.input)
got, err := fts.ParseTsvector(test.input)
require.NoError(t, err)
assert.Equal(t, test.wantTsv, got)