Skip to content

Commit d43f9f9

Browse files
committed
SearchDisjunctiveFacets use all filters
1 parent 7f0c277 commit d43f9f9

File tree

4 files changed

+22
-18
lines changed

4 files changed

+22
-18
lines changed

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.0.0-beta03"
5+
override val version = "1.0.0-beta04"
66
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,13 @@ public interface EndpointSearch {
111111
*
112112
* @param query The [Query] used to search.
113113
* @param disjunctiveFacets List of [Attribute] that are marked as disjunctive facets.
114-
* @param filters The [Filter.Facet] to be applied
114+
* @param filters The [Filter] to be applied.
115115
* @param requestOptions Configure request locally with [RequestOptions].
116116
*/
117117
suspend fun searchDisjunctiveFacets(
118118
query: Query,
119119
disjunctiveFacets: List<Attribute>,
120-
filters: List<Filter.Facet>,
120+
filters: Set<Filter>,
121121
requestOptions: RequestOptions? = null
122122
): ResponseSearch
123123
}

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ internal class EndpointSearchImpl(
6464
override suspend fun searchDisjunctiveFacets(
6565
query: Query,
6666
disjunctiveFacets: List<Attribute>,
67-
filters: List<Filter.Facet>,
67+
filters: Set<Filter>,
6868
requestOptions: RequestOptions?
6969
): ResponseSearch {
70-
val (orFilters, andFilters) = filters.partition { disjunctiveFacets.contains(it.attribute) }
71-
val queryAnd = buildAndQueries(query, andFilters, orFilters)
72-
val queriesOr = buildOrQueries(disjunctiveFacets, query, andFilters, orFilters)
70+
val (filtersOr, filtersAnd) = filters.partition { disjunctiveFacets.contains(it.attribute) }
71+
val queryAnd = buildAndQueries(query, filtersAnd, filtersOr)
72+
val queriesOr = buildOrQueries(query, filtersAnd, filtersOr, disjunctiveFacets)
7373
val results = EndpointMultipleIndexImpl(transport).multipleQueries(queryAnd.plus(queriesOr)).results
7474
val resultAnd = results.first()
7575
val resultsOr = results.subList(1, results.size)
@@ -89,22 +89,24 @@ internal class EndpointSearchImpl(
8989

9090
private fun buildAndQueries(
9191
query: Query,
92-
andFilters: List<Filter.Facet>,
93-
orFilters: List<Filter.Facet>
92+
filtersAnd: List<Filter>,
93+
filtersOr: List<Filter>
9494
): List<IndexQuery> {
9595
return query.copy().apply {
9696
filters {
97-
and { +andFilters }
98-
orFacet { +orFilters }
97+
and { +filtersAnd }
98+
orFacet { +filtersOr.filterIsInstance<Filter.Facet>() }
99+
orTag { +filtersOr.filterIsInstance<Filter.Tag>() }
100+
orNumeric { +filtersOr.filterIsInstance<Filter.Numeric>() }
99101
}
100102
}.let { listOf(IndexQuery(indexName, it)) }
101103
}
102104

103105
private fun buildOrQueries(
104-
disjunctiveFacets: List<Attribute>,
105106
query: Query,
106-
andFilters: List<Filter.Facet>,
107-
orFilters: List<Filter.Facet>
107+
filtersAnd: List<Filter>,
108+
filtersOr: List<Filter>,
109+
disjunctiveFacets: List<Attribute>
108110
): List<IndexQuery> {
109111
return disjunctiveFacets.map { attribute ->
110112
query.copy().apply {
@@ -114,8 +116,10 @@ internal class EndpointSearchImpl(
114116
hitsPerPage = 0
115117
analytics = false
116118
filters {
117-
and { +andFilters }
118-
orFacet { +orFilters.filter { it.attribute != attribute } }
119+
and { +filtersAnd }
120+
orFacet { +filtersOr.filterIsInstance<Filter.Facet>().filter { it.attribute != attribute } }
121+
orTag { +filtersOr.filterIsInstance<Filter.Tag>() }
122+
orNumeric { +filtersOr.filterIsInstance<Filter.Numeric>() }
119123
}
120124
}
121125
}.map { IndexQuery(indexName, it) }

src/commonTest/kotlin/suite/TestSuiteDisjunctive.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ internal class TestSuiteDisjunctive {
4949
facets = facets
5050
)
5151
val disjunctiveFacets = listOf(brand)
52-
val filters = listOf(
52+
val filters = setOf(
5353
Filter.Facet(brand, "Apple"),
5454
Filter.Facet(brand, "Samsung"),
5555
Filter.Facet(brand, "Commas' voice, Ltd"),
@@ -93,7 +93,7 @@ internal class TestSuiteDisjunctive {
9393
facets = setOf(city)
9494
)
9595
val disjunctiveFacets = listOf(stars, facilities)
96-
val filters = mutableListOf<Filter.Facet>()
96+
val filters = mutableSetOf<Filter.Facet>()
9797

9898
index.apply {
9999
val tasks = mutableListOf<Task>()

0 commit comments

Comments
 (0)