@@ -79,19 +79,15 @@ internal fun List<SimilarityResult<out Retrievable>>.withNeighbours(
7979}
8080
8181@Suppress(" UNCHECKED_CAST" )
82- internal fun <T : Retrievable > VectorSearch.searchWithFilter (
82+ internal fun <T : Retrievable > VectorSearch.vectorSearchWithFilter (
8383 request : TextSimilaritySearchRequest ,
8484 clazz : Class <T >,
8585 metadataFilter : PropertyFilter ? ,
8686 entityFilter : EntityFilter ? ,
87- ): List <SimilarityResult <T >> {
88- if (metadataFilter == null && entityFilter == null ) {
89- return vectorSearch(request, clazz)
90- }
91- if (this is FilteringVectorSearch ) {
92- return vectorSearchWithFilter(request, clazz, metadataFilter, entityFilter)
93- }
94- return PostFilteringSearch .search(
87+ ): List <SimilarityResult <T >> = when {
88+ metadataFilter == null && entityFilter == null -> vectorSearch(request, clazz)
89+ this is FilteringVectorSearch -> vectorSearchWithFilter(request, clazz, metadataFilter, entityFilter)
90+ else -> PostFilteringSearch .search(
9591 request,
9692 metadataFilter,
9793 entityFilter,
@@ -147,7 +143,7 @@ internal class VectorSearchTools @JvmOverloads constructor(
147143
148144 private fun searchForAllTypes (request : TextSimilaritySearchRequest ): List <SimilarityResult <out Retrievable >> {
149145 val allResults = searchFor.flatMap { clazz ->
150- vectorSearch.searchWithFilter (request, clazz, metadataFilter, entityFilter)
146+ vectorSearch.vectorSearchWithFilter (request, clazz, metadataFilter, entityFilter)
151147 }
152148 return deduplicateByIdKeepingHighestScore(allResults)
153149 }
@@ -380,6 +376,25 @@ internal class SectionReadingTools @JvmOverloads constructor(
380376 }
381377}
382378
379+ @Suppress(" UNCHECKED_CAST" )
380+ internal fun <T : Retrievable > TextSearch.textSearchWithFilter (
381+ request : TextSimilaritySearchRequest ,
382+ clazz : Class <T >,
383+ metadataFilter : PropertyFilter ? ,
384+ entityFilter : EntityFilter ? ,
385+ ): List <SimilarityResult <T >> = when {
386+ metadataFilter == null && entityFilter == null -> textSearch(request, clazz)
387+ this is FilteringTextSearch -> textSearchWithFilter(request, clazz, metadataFilter, entityFilter)
388+ else -> PostFilteringSearch .search(
389+ request,
390+ metadataFilter,
391+ entityFilter,
392+ TopKInflationStrategy .DEFAULT ,
393+ ) { inflatedRequest ->
394+ textSearch(inflatedRequest, clazz)
395+ } as List <SimilarityResult <T >>
396+ }
397+
383398/* *
384399 * Tools to perform text search operations with the syntax supported by
385400 * the backing [TextSearch] store.
@@ -480,36 +495,11 @@ internal class TextSearchTools @JvmOverloads constructor(
480495
481496 private fun searchForAllTypes (request : TextSimilaritySearchRequest ): List <SimilarityResult <out Retrievable >> {
482497 val allResults = searchFor.flatMap { clazz ->
483- searchWithFilter (request, clazz)
498+ textSearch.textSearchWithFilter (request, clazz, metadataFilter, entityFilter )
484499 }
485500 return deduplicateByIdKeepingHighestScore(allResults)
486501 }
487502
488- @Suppress(" UNCHECKED_CAST" )
489- private fun <T : Retrievable > searchWithFilter (
490- request : TextSimilaritySearchRequest ,
491- clazz : Class <T >,
492- ): List <SimilarityResult <T >> {
493- if (metadataFilter == null && entityFilter == null ) {
494- return textSearch.textSearch(request, clazz)
495- }
496-
497- // If backend supports native filtering, use it
498- if (textSearch is FilteringTextSearch ) {
499- return textSearch.textSearchWithFilter(request, clazz, metadataFilter, entityFilter)
500- }
501-
502- // Fallback: inflate topK, search, post-filter, take topK
503- return PostFilteringSearch .search(
504- request,
505- metadataFilter,
506- entityFilter,
507- TopKInflationStrategy .DEFAULT
508- ) { inflatedRequest ->
509- textSearch.textSearch(inflatedRequest, clazz)
510- } as List <SimilarityResult <T >>
511- }
512-
513503 companion object {
514504 /* *
515505 * Compose the tool's top-level description from the store's
0 commit comments