@@ -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) }
0 commit comments