@@ -53,6 +53,79 @@ public async Task GoogleSearchAsync()
5353 }
5454 }
5555
56+ /// <summary>
57+ /// Show how to use <see cref="BingTextSearch"/> with the new generic <see cref="ITextSearch{TRecord}"/>
58+ /// interface and LINQ filtering for type-safe searches.
59+ /// </summary>
60+ [ Fact ]
61+ public async Task BingSearchWithLinqFilteringAsync ( )
62+ {
63+ // Create a BingTextSearch instance
64+ var bingSearch = new BingTextSearch ( apiKey : TestConfiguration . Bing . ApiKey ) ;
65+
66+ // Use the new generic interface for type-safe searches
67+ ITextSearch < BingWebPage > textSearch = bingSearch ;
68+
69+ var query = "What is the Semantic Kernel?" ;
70+
71+ // Use LINQ filtering for type-safe search with compile-time validation
72+ var options = new TextSearchOptions < BingWebPage >
73+ {
74+ Top = 4 ,
75+ Filter = page => page . Language == "en" && page . IsFamilyFriendly == true
76+ } ;
77+
78+ // Search and return strongly-typed results
79+ Console . WriteLine ( "\n --- Bing Search with LINQ Filtering ---\n " ) ;
80+ KernelSearchResults < BingWebPage > searchResults = await textSearch . GetSearchResultsAsync ( query , options ) ;
81+ await foreach ( BingWebPage page in searchResults . Results )
82+ {
83+ Console . WriteLine ( $ "Name: { page . Name } ") ;
84+ Console . WriteLine ( $ "Snippet: { page . Snippet } ") ;
85+ Console . WriteLine ( $ "Url: { page . Url } ") ;
86+ Console . WriteLine ( $ "Language: { page . Language } ") ;
87+ Console . WriteLine ( $ "Family Friendly: { page . IsFamilyFriendly } ") ;
88+ Console . WriteLine ( "---" ) ;
89+ }
90+ }
91+
92+ /// <summary>
93+ /// Show how to use <see cref="GoogleTextSearch"/> with the new generic <see cref="ITextSearch{TRecord}"/>
94+ /// interface and LINQ filtering for type-safe searches.
95+ /// </summary>
96+ [ Fact ]
97+ public async Task GoogleSearchWithLinqFilteringAsync ( )
98+ {
99+ // Create a GoogleTextSearch instance
100+ var googleSearch = new GoogleTextSearch (
101+ searchEngineId : TestConfiguration . Google . SearchEngineId ,
102+ apiKey : TestConfiguration . Google . ApiKey ) ;
103+
104+ // Use the new generic interface for type-safe searches
105+ ITextSearch < GoogleWebPage > textSearch = googleSearch ;
106+
107+ var query = "What is the Semantic Kernel?" ;
108+
109+ // Use LINQ filtering for type-safe search with compile-time validation
110+ var options = new TextSearchOptions < GoogleWebPage >
111+ {
112+ Top = 4 ,
113+ Filter = page => page . Title . Contains ( "Semantic" ) && page . DisplayLink . EndsWith ( ".com" )
114+ } ;
115+
116+ // Search and return strongly-typed results
117+ Console . WriteLine ( "\n --- Google Search with LINQ Filtering ---\n " ) ;
118+ KernelSearchResults < GoogleWebPage > searchResults = await textSearch . GetSearchResultsAsync ( query , options ) ;
119+ await foreach ( GoogleWebPage page in searchResults . Results )
120+ {
121+ Console . WriteLine ( $ "Title: { page . Title } ") ;
122+ Console . WriteLine ( $ "Snippet: { page . Snippet } ") ;
123+ Console . WriteLine ( $ "Link: { page . Link } ") ;
124+ Console . WriteLine ( $ "Display Link: { page . DisplayLink } ") ;
125+ Console . WriteLine ( "---" ) ;
126+ }
127+ }
128+
56129 /// <summary>
57130 /// Show how to create a <see cref="BingTextSearch"/> and use it to perform a search
58131 /// and return results as a collection of <see cref="BingWebPage"/> instances.
@@ -86,7 +159,7 @@ public async Task SearchForWebPagesAsync()
86159 }
87160 else
88161 {
89- Console . WriteLine ( "\n ——— Google Web Page Results ——— \n " ) ;
162+ Console . WriteLine ( "\n ��� Google Web Page Results ��� \n " ) ;
90163 await foreach ( Google . Apis . CustomSearchAPI . v1 . Data . Result result in objectResults . Results )
91164 {
92165 Console . WriteLine ( $ "Title: { result . Title } ") ;
0 commit comments