You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: Add Contains() and SearchQueryFilterClause subsections to ADR-0065
- Add 'Text Search Contains() Support Implementation' subsection
- Documents query enhancement pattern for Brave/Tavily
- Explains SearchQueryFilterClause design decision
- Lists alternatives and consequences
- Add 'SearchQueryFilterClause Public Visibility' subsection
- Documents public API decision and rationale
- Explains FilterClause internal constructor constraint
- Lists alternatives considered (move to Plugins.Web, InternalsVisibleTo, etc.)
These implementation decisions are integral to the overall LINQ-based
text search filtering architecture and belong within the main ADR. #10456
Copy file name to clipboardExpand all lines: dotnet/docs/decisions/0065-linq-based-text-search-filtering.md
+84Lines changed: 84 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -386,6 +386,90 @@ public interface ITextSearch
386
386
387
387
**Estimated Timeline**: Phase 2 in next major version (e.g., SK 2.0), Phase 3 in subsequent major version (e.g., SK 3.0). This gives ecosystem minimum 1-2 years to migrate.
388
388
389
+
### Text Search Contains() Support Implementation
390
+
391
+
The `ITextSearch<TRecord>` interface supports LINQ expressions, including `Title.Contains("value")` patterns. Different search engine APIs have varying capabilities for handling text matching within specific fields:
1.**Direct API Parameters**: Not available in Brave/Tavily APIs
414
+
2.**Post-Search Filtering**: Would reduce result relevance and performance
415
+
3.**NotSupportedException**: Would limit LINQ expression capabilities
416
+
417
+
**Consequences**:
418
+
419
+
- ✅ Consistent LINQ expression support across search engines
420
+
- ✅ Enhanced search relevance by modifying query rather than filtering results
421
+
- ✅ Extensible pattern for future Contains() implementations
422
+
- ✅ Maintains backward compatibility with legacy `ITextSearch` interface
423
+
- ⚠️ Different implementation approaches across search engines (consistency concern)
424
+
- ⚠️ Additional complexity in filter clause processing
425
+
- ⚠️ Query enhancement may affect search precision in some cases
426
+
427
+
### SearchQueryFilterClause Public Visibility
428
+
429
+
**Context**: Reviewer feedback requested moving `SearchQueryFilterClause` from `VectorData.Abstractions` to `Plugins.Web` to reduce public API surface. Investigation revealed architectural constraint preventing this move.
430
+
431
+
**Problem**: `FilterClause` base class has an **internal constructor**, preventing inheritance outside the `VectorData.Abstractions` assembly:
0 commit comments