Skip to content

Commit a5b85d7

Browse files
authored
Merge pull request #152 from algolia/develop
Version 1.2.1
2 parents 7e7b58b + 673c27d commit a5b85d7

File tree

8 files changed

+50
-18
lines changed

8 files changed

+50
-18
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 1.2.1
2+
3+
- Fixed a bug when using advanced search: Disjunctive filters where flattened and lost proper AND / OR operator from the group #151
4+
15
# 1.2.0
26

37
- Updated Kotlin `1.3.60`

buildSrc/src/main/kotlin/Library.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ object Library: Dependency {
22

33
override val group = "com.algolia"
44
override val artifact = "algoliasearch-client-kotlin"
5-
override val version = "1.2.0"
5+
override val version = "1.2.1"
66
}

src/commonMain/kotlin/com/algolia/search/endpoint/EndpointSearchImpl.kt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.algolia.search.model.Attribute
77
import com.algolia.search.model.IndexName
88
import com.algolia.search.model.filter.Filter
99
import com.algolia.search.model.filter.FilterGroup
10+
import com.algolia.search.model.filter.FilterGroupsConverter
1011
import com.algolia.search.model.multipleindex.IndexQuery
1112
import com.algolia.search.model.request.RequestParams
1213
import com.algolia.search.model.response.ResponseHitWithPosition
@@ -102,20 +103,19 @@ internal class EndpointSearchImpl(
102103
val filtersOrFacet = filtersOr.filterIsInstance<Filter.Facet>()
103104
val filtersOrTag = filtersOr.filterIsInstance<Filter.Tag>()
104105
val filtersOrNumeric = filtersOr.filterIsInstance<Filter.Numeric>()
105-
val queryForResults = query
106-
.toIndexQuery()
107-
.filters(filtersAnd, filtersOrFacet, filtersOrTag, filtersOrNumeric)
106+
val queryForResults = query.toIndexQuery().setFilters(filterGroups)
108107
val queriesForDisjunctiveFacets = disjunctiveFacets.map { attribute ->
108+
val groups = filterGroups.map { group ->
109+
if (group is FilterGroup.Or.Facet) {
110+
FilterGroup.Or.Facet(group.filter { filter -> filter.attribute != attribute }.toSet())
111+
} else group
112+
}
113+
109114
query
110115
.toIndexQuery()
111-
.filters(
112-
filtersAnd,
113-
filtersOrFacet.filter { it.attribute != attribute },
114-
filtersOrTag,
115-
filtersOrNumeric
116-
)
117116
.setFacets(attribute)
118117
.optimize()
118+
.setFilters(groups.toSet())
119119
}
120120
val queriesForHierarchicalFacets = filterGroups.filterIsInstance<FilterGroup.And.Hierarchical>().flatMap {
121121
it.attributes
@@ -139,6 +139,11 @@ internal class EndpointSearchImpl(
139139
return response.aggregateResult(disjunctiveFacets.size)
140140
}
141141

142+
private fun IndexQuery.setFilters(groups: Set<FilterGroup<*>>): IndexQuery {
143+
query.filters = FilterGroupsConverter.SQL(groups)
144+
return this
145+
}
146+
142147
private fun List<ResponseSearch>.aggregateFacets(): Map<Attribute, List<Facet>> {
143148
return fold(mapOf()) { acc, result ->
144149
result.facetsOrNull?.let { acc + it } ?: acc
@@ -201,7 +206,6 @@ internal class EndpointSearchImpl(
201206
return this
202207
}
203208

204-
205209
private fun IndexQuery.setFacets(facet: Attribute?): IndexQuery {
206210
if (facet != null) query.facets = setOf(facet)
207211
return this

src/commonMain/kotlin/com/algolia/search/model/filter/FilterGroupsConverter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public sealed class FilterGroupsConverter<I, O> : (I) -> O {
1414

1515
override fun invoke(groups: Set<FilterGroup<*>>): String? {
1616
return if (groups.isNotEmpty()) {
17-
groups.joinToString(separator = " AND ") { group ->
17+
groups.filterNot { it.isEmpty() }.joinToString(separator = " AND ") { group ->
1818
val separator = when (group) {
1919
is FilterGroup.And -> " AND "
2020
is FilterGroup.Or -> " OR "

src/commonMain/kotlin/com/algolia/search/model/multicluster/ClusterName.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,11 @@ import kotlinx.serialization.internal.StringSerializer
1111

1212

1313
/**
14-
* [ClusterName] of a cluster. Can't be a blank or empty string.
14+
* [ClusterName] of a cluster.
1515
*/
1616
@Serializable(ClusterName.Companion::class)
1717
public data class ClusterName(override val raw: String) : Raw<String> {
1818

19-
init {
20-
if (raw.isBlank()) throw EmptyStringException("ClusterName")
21-
}
22-
2319
override fun toString(): String {
2420
return raw
2521
}

src/commonTest/kotlin/documentation/methods/multicluster/DocAssignUserID.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ internal class DocAssignUserID {
1414
// suspend fun ClientSearch.assignUserID(
1515
// #{userID}: __UserID__,
1616
// #{clusterName}: __ClusterName__,
17+
// #{requestOptions}: __RequestOptions?__ = null
1718
// ): Creation
1819

1920
@Test
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package documentation.methods.multicluster
2+
3+
import com.algolia.search.model.multicluster.ClusterName
4+
import com.algolia.search.model.multicluster.UserID
5+
import com.algolia.search.model.response.ResponseHasPendingMapping
6+
import com.algolia.search.transport.RequestOptions
7+
import documentation.client
8+
import runBlocking
9+
import kotlin.test.Ignore
10+
import kotlin.test.Test
11+
12+
13+
@Ignore
14+
internal class DocHasPendingMapping {
15+
16+
// suspend fun hasPendingMapping(
17+
// #{retrieveMapping}: __Boolean__ = false,
18+
// #{requestOptions}: __RequestOptions?__ = null
19+
// ): ResponseHasPendingMapping
20+
21+
@Test
22+
fun snippet1() {
23+
runBlocking {
24+
client.hasPendingMapping(retrieveMapping = true)
25+
}
26+
}
27+
}

src/commonTest/kotlin/suite/TestSuiteDisjunctive.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ internal class TestSuiteDisjunctive {
5656
)
5757
val filterGroups = setOf(
5858
FilterGroup.Or.Facet(filters),
59-
FilterGroup.And.Facet( Filter.Facet(category, "device"))
59+
FilterGroup.And.Facet(Filter.Facet(category, "device"))
6060
)
6161

6262
index.apply {

0 commit comments

Comments
 (0)