forked from microsoft/semantic-kernel
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStep1_Web_Search.cs
More file actions
132 lines (117 loc) · 5.27 KB
/
Step1_Web_Search.cs
File metadata and controls
132 lines (117 loc) · 5.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright (c) Microsoft. All rights reserved.
#pragma warning disable CS0618 // ITextSearch is obsolete - Sample demonstrates legacy interface usage
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;
using Microsoft.SemanticKernel.Plugins.Web.Google;
namespace GettingStartedWithTextSearch;
/// <summary>
/// This example shows how to create and use a <see cref="ITextSearch"/>.
/// </summary>
public class Step1_Web_Search(ITestOutputHelper output) : BaseTest(output)
{
/// <summary>
/// Show how to create a <see cref="BingTextSearch"/> and use it to perform a search.
/// </summary>
[Fact]
public async Task BingSearchAsync()
{
// Create an ITextSearch instance using Bing search
var textSearch = new BingTextSearch(apiKey: TestConfiguration.Bing.ApiKey);
var query = "What is the Semantic Kernel?";
// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
Console.WriteLine(result);
}
}
/// <summary>
/// Show how to create a <see cref="GoogleTextSearch"/> and use it to perform a search.
/// </summary>
[Fact]
public async Task GoogleSearchAsync()
{
// Create an ITextSearch instance using Google search
var textSearch = new GoogleTextSearch(
searchEngineId: TestConfiguration.Google.SearchEngineId,
apiKey: TestConfiguration.Google.ApiKey);
var query = "What is the Semantic Kernel?";
// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
Console.WriteLine(result);
}
}
/// <summary>
/// Show how to create a <see cref="BingTextSearch"/> and use it to perform a search
/// and return results as a collection of <see cref="BingWebPage"/> instances.
/// </summary>
[Fact]
public async Task SearchForWebPagesAsync()
{
// Create an ITextSearch instance
ITextSearch textSearch = this.UseBingSearch ?
new BingTextSearch(
apiKey: TestConfiguration.Bing.ApiKey) :
new GoogleTextSearch(
searchEngineId: TestConfiguration.Google.SearchEngineId,
apiKey: TestConfiguration.Google.ApiKey);
var query = "What is the Semantic Kernel?";
// Search and return results using the implementation specific data model
KernelSearchResults<object> objectResults = await textSearch.GetSearchResultsAsync(query, new() { Top = 4 });
if (this.UseBingSearch)
{
Console.WriteLine("\n--- Bing Web Page Results ---\n");
await foreach (BingWebPage webPage in objectResults.Results)
{
Console.WriteLine($"Name: {webPage.Name}");
Console.WriteLine($"Snippet: {webPage.Snippet}");
Console.WriteLine($"Url: {webPage.Url}");
Console.WriteLine($"DisplayUrl: {webPage.DisplayUrl}");
Console.WriteLine($"DateLastCrawled: {webPage.DateLastCrawled}");
}
}
else
{
Console.WriteLine("\n——— Google Web Page Results ———\n");
await foreach (Google.Apis.CustomSearchAPI.v1.Data.Result result in objectResults.Results)
{
Console.WriteLine($"Title: {result.Title}");
Console.WriteLine($"Snippet: {result.Snippet}");
Console.WriteLine($"Link: {result.Link}");
Console.WriteLine($"DisplayLink: {result.DisplayLink}");
Console.WriteLine($"Kind: {result.Kind}");
}
}
}
/// <summary>
/// Show how to create a <see cref="BingTextSearch"/> and use it to perform a search
/// and return results as a collection of <see cref="TextSearchResult"/> instances.
/// </summary>
/// <remarks>
/// Having a normalized format for search results is useful when you want to process the results
/// for different search services in a consistent way.
/// </remarks>
[Fact]
public async Task SearchForTextSearchResultsAsync()
{
// Create an ITextSearch instance
ITextSearch textSearch = this.UseBingSearch ?
new BingTextSearch(
apiKey: TestConfiguration.Bing.ApiKey) :
new GoogleTextSearch(
searchEngineId: TestConfiguration.Google.SearchEngineId,
apiKey: TestConfiguration.Google.ApiKey);
var query = "What is the Semantic Kernel?";
// Search and return results as TextSearchResult items
KernelSearchResults<TextSearchResult> textResults = await textSearch.GetTextSearchResultsAsync(query, new() { Top = 4 });
Console.WriteLine("\n--- Text Search Results ---\n");
await foreach (TextSearchResult result in textResults.Results)
{
Console.WriteLine($"Name: {result.Name}");
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Link: {result.Link}");
}
}
}