56 lines
2.0 KiB
Go
56 lines
2.0 KiB
Go
//go:build integration
|
|
|
|
package search
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// Use a private index: never replace a running application's search indexes.
|
|
func TestArtistSearchRelevance(t *testing.T) {
|
|
url := os.Getenv("TEST_MEILI_URL")
|
|
if url == "" {
|
|
t.Skip("TEST_MEILI_URL is not set")
|
|
}
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
|
|
defer cancel()
|
|
m := NewMeili(url, os.Getenv("TEST_MEILI_KEY"))
|
|
index := "search_test_" + uuid.New().String()
|
|
require.NoError(t, m.call(ctx, http.MethodPost, "/indexes", map[string]any{"uid": index, "primaryKey": "id"}))
|
|
t.Cleanup(func() {
|
|
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
|
defer cancel()
|
|
require.NoError(t, m.deleteIndexIfExists(ctx, index))
|
|
})
|
|
require.NoError(t, m.call(ctx, http.MethodPatch, "/indexes/"+index+"/settings", specs[0].settings))
|
|
var docs []map[string]any
|
|
for id, name := range map[string]string{
|
|
"exact": "BOULEVARD DEPO", "collaboration": "Boulevard Depo X 161",
|
|
"reversed": "Depo Boulevard", "unrelated": "Thoma Bulwer",
|
|
"partial": "Станция бульвар малина",
|
|
} {
|
|
docs = append(docs, map[string]any{"id": id, "name": name, "name_translit": TranslitVariants(name), "popularity": 0})
|
|
}
|
|
require.NoError(t, m.call(ctx, http.MethodPost, "/indexes/"+index+"/documents", docs))
|
|
for _, query := range []string{"boulevard depo", "бульвар депо", "боулевард депо"} {
|
|
t.Run(query, func(t *testing.T) {
|
|
results, err := m.MultiSearch(ctx, []MultiQuery{{IndexUID: index, Q: query, Limit: 10,
|
|
MatchingStrategy: "all", AttributesToRetrieve: []string{"id", "name", "name_translit"}}})
|
|
require.NoError(t, err)
|
|
require.Len(t, results, 1)
|
|
require.NotEmpty(t, results[0].IDs)
|
|
require.Equal(t, "exact", results[0].IDs[0])
|
|
require.NotContains(t, results[0].IDs, "unrelated")
|
|
require.NotContains(t, results[0].IDs, "partial")
|
|
require.Contains(t, results[0].ExactIDs, "exact")
|
|
})
|
|
}
|
|
}
|