@@ -64,12 +64,12 @@ internal class EndpointSearchImpl(
64
64
override suspend fun searchDisjunctiveFacets (
65
65
query : Query ,
66
66
disjunctiveFacets : List <Attribute >,
67
- filters : List <Filter . Facet >,
67
+ filters : Set <Filter >,
68
68
requestOptions : RequestOptions ?
69
69
): 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 )
73
73
val results = EndpointMultipleIndexImpl (transport).multipleQueries(queryAnd.plus(queriesOr)).results
74
74
val resultAnd = results.first()
75
75
val resultsOr = results.subList(1 , results.size)
@@ -89,22 +89,24 @@ internal class EndpointSearchImpl(
89
89
90
90
private fun buildAndQueries (
91
91
query : Query ,
92
- andFilters : List <Filter . Facet >,
93
- orFilters : List <Filter . Facet >
92
+ filtersAnd : List <Filter >,
93
+ filtersOr : List <Filter >
94
94
): List <IndexQuery > {
95
95
return query.copy().apply {
96
96
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 >() }
99
101
}
100
102
}.let { listOf (IndexQuery (indexName, it)) }
101
103
}
102
104
103
105
private fun buildOrQueries (
104
- disjunctiveFacets : List <Attribute >,
105
106
query : Query ,
106
- andFilters : List <Filter .Facet >,
107
- orFilters : List <Filter .Facet >
107
+ filtersAnd : List <Filter >,
108
+ filtersOr : List <Filter >,
109
+ disjunctiveFacets : List <Attribute >
108
110
): List <IndexQuery > {
109
111
return disjunctiveFacets.map { attribute ->
110
112
query.copy().apply {
@@ -114,8 +116,10 @@ internal class EndpointSearchImpl(
114
116
hitsPerPage = 0
115
117
analytics = false
116
118
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 >() }
119
123
}
120
124
}
121
125
}.map { IndexQuery (indexName, it) }
0 commit comments