@@ -2,14 +2,21 @@ package suite
22
33import clientAdmin1
44import clientSearch
5+ import com.algolia.search.dsl.*
6+ import com.algolia.search.helper.readContent
57import com.algolia.search.helper.toAttribute
68import com.algolia.search.model.ObjectID
9+ import com.algolia.search.model.indexing.Indexable
710import com.algolia.search.model.response.ResponseSearch
11+ import com.algolia.search.model.search.ExplainModule
12+ import com.algolia.search.model.search.IgnorePlurals
813import com.algolia.search.model.search.Query
914import com.algolia.search.model.settings.AttributeForFaceting
1015import com.algolia.search.model.settings.Settings
1116import com.algolia.search.model.task.Task
1217import com.algolia.search.model.task.TaskStatus
18+ import io.ktor.client.features.ResponseException
19+ import kotlinx.serialization.Serializable
1320import kotlinx.serialization.json.JsonObjectSerializer
1421import kotlinx.serialization.list
1522import runBlocking
@@ -90,4 +97,54 @@ internal class TestSuiteSearch {
9097 }
9198 }
9299 }
100+
101+ @Test
102+ fun explain () {
103+
104+ @Serializable
105+ data class DecompoundingObject (
106+ override val objectID : ObjectID ,
107+ val type : String ,
108+ val category : String? = null
109+ ): Indexable
110+
111+ runBlocking {
112+ val settings = settings {
113+ decompoundedAttributes {
114+ german {
115+ + " category"
116+ + " type"
117+ + " desc"
118+ }
119+ }
120+ queryLanguages {
121+ + German
122+ }
123+ ignorePlurals = IgnorePlurals .True
124+ }
125+ val data = listOf (
126+ DecompoundingObject (ObjectID (" A...B" ), " Hütte" , " Hunde" ),
127+ DecompoundingObject (ObjectID (" AB" ), " Ich will ein schöne Hundehütte" ),
128+ DecompoundingObject (ObjectID (" BA" ), " Hüttehunde, Es ist eine lustige Verbindung!" ),
129+ DecompoundingObject (ObjectID (" B...A" ), " Eine Hütte für Hunde" ),
130+ DecompoundingObject (ObjectID (" A" ), " Hunde" ),
131+ DecompoundingObject (ObjectID (" B" ), " Hütte" )
132+ )
133+
134+ index.apply {
135+ saveObjects(DecompoundingObject .serializer(), data).wait()
136+ setSettings(settings).wait()
137+ }
138+
139+ val search = index.search(
140+ query(" Hundehütte" ) {
141+ ignorePlurals = IgnorePlurals .True
142+ explainModules { + ExplainModule .MatchAlternatives }
143+ }
144+ )
145+
146+ search.explainOrNull.shouldNotBeNull()
147+ search.explain.match.alternatives.size shouldEqual 11
148+ }
149+ }
93150}
0 commit comments