Skip to content

Commit 4ac3272

Browse files
authored
Merge pull request #20 from LisaLeib/java-quickstart-sample
Java quickstart sample - remove blank folders and add query key
2 parents 9fd049d + 0942461 commit 4ac3272

File tree

8 files changed

+234
-233
lines changed

8 files changed

+234
-233
lines changed

quickstart/pom.xml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
24
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
35
<modelVersion>4.0.0</modelVersion>
4-
<groupId>AzureSearchSample</groupId>
5-
<artifactId>AzureSearchSample</artifactId>
6-
<version>0.0.1-SNAPSHOT</version>
7-
<packaging>jar</packaging>
8-
<properties>
9-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
10-
</properties>
6+
7+
<groupId>AzureSearchQuickstart</groupId>
8+
<artifactId>AzureSearchQuickstart</artifactId>
9+
<version>1.0-SNAPSHOT</version>
1110
<build>
1211
<sourceDirectory>src</sourceDirectory>
1312
<plugins>
@@ -31,7 +30,7 @@
3130
</execution>
3231
</executions>
3332
<configuration>
34-
<mainClass>com.microsoft.azure.search.samples.app.App</mainClass>
33+
<mainClass>app.App</mainClass>
3534
<cleanupDaemonThreads>false</cleanupDaemonThreads>
3635
</configuration>
3736
</plugin>
@@ -44,4 +43,5 @@
4443
<version>1.0.2</version>
4544
</dependency>
4645
</dependencies>
46+
4747
</project>

quickstart/src/main/java/com/microsoft/azure/search/samples/app/App.java renamed to quickstart/src/main/java/app/App.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
package com.microsoft.azure.search.samples.app;
2-
3-
import com.microsoft.azure.search.samples.service.SearchServiceClient;
1+
package app;
42

3+
import service.SearchServiceClient;
54
import java.io.IOException;
65
import java.util.Properties;
76

@@ -19,36 +18,42 @@ public static void main(String[] args) {
1918
var config = loadPropertiesFromResource("config.properties");
2019
var client = new SearchServiceClient(
2120
config.getProperty("SearchServiceName"),
22-
config.getProperty("SearchServiceApiKey"),
21+
config.getProperty("SearchServiceAdminKey"),
22+
config.getProperty("SearchServiceQueryKey"),
2323
config.getProperty("ApiVersion"),
2424
config.getProperty("IndexName")
2525
);
2626

27-
if(client.indexExists()){ client.deleteIndex();}
27+
28+
//Uncomment the next 3 lines in the 1 - Create Index section of the quickstart
29+
if (client.indexExists()) { client.deleteIndex();}
2830
client.createIndex("index.json");
2931
Thread.sleep(1000L); // wait a second to create the index
32+
33+
//Uncomment the next 2 lines in the 2 - Load Documents section of the quickstart
3034
client.uploadDocuments("hotels.json");
3135
Thread.sleep(2000L); // wait 2 seconds for data to upload
3236

37+
//Uncomment the following 5 search queries in the 3 - Search an index section of the quickstart
3338
// Query 1
3439
client.logMessage("\n*QUERY 1****************************************************************");
35-
client.logMessage("Search for: Atlanta'");
40+
client.logMessage("Search for: Atlanta");
3641
client.logMessage("Return: All fields'");
3742
client.searchPlus("Atlanta");
3843

3944
// Query 2
4045
client.logMessage("\n*QUERY 2****************************************************************");
4146
client.logMessage("Search for: Atlanta");
4247
client.logMessage("Return: HotelName, Tags, Address");
43-
SearchServiceClient.SearchOptions options2 = client.new SearchOptions();
48+
SearchServiceClient.SearchOptions options2 = client.createSearchOptions();
4449
options2.select = "HotelName,Tags,Address";
4550
client.searchPlus("Atlanta", options2);
4651

4752
//Query 3
4853
client.logMessage("\n*QUERY 3****************************************************************");
4954
client.logMessage("Search for: wifi & restaurant");
5055
client.logMessage("Return: HotelName, Description, Tags");
51-
SearchServiceClient.SearchOptions options3 = client.new SearchOptions();
56+
SearchServiceClient.SearchOptions options3 = client.createSearchOptions();
5257
options3.select = "HotelName,Description,Tags";
5358
client.searchPlus("wifi,restaurant", options3);
5459

@@ -57,7 +62,7 @@ public static void main(String[] args) {
5762
client.logMessage("Search for: all");
5863
client.logMessage("Filter: Ratings greater than 4");
5964
client.logMessage("Return: HotelName, Rating");
60-
SearchServiceClient.SearchOptions options4 = client.new SearchOptions();
65+
SearchServiceClient.SearchOptions options4 = client.createSearchOptions();
6166
options4.filter="Rating%20gt%204";
6267
options4.select = "HotelName,Rating";
6368
client.searchPlus("*",options4);
@@ -68,7 +73,7 @@ public static void main(String[] args) {
6873
client.logMessage("Get: Top 2 results");
6974
client.logMessage("Order by: Rating in descending order");
7075
client.logMessage("Return: HotelId, HotelName, Category, Rating");
71-
SearchServiceClient.SearchOptions options5 = client.new SearchOptions();
76+
SearchServiceClient.SearchOptions options5 = client.createSearchOptions();
7277
options5.top=2;
7378
options5.orderby = "Rating%20desc";
7479
options5.select = "HotelId,HotelName,Category,Rating";

quickstart/src/main/java/com/microsoft/azure/search/samples/service/SearchServiceClient.java renamed to quickstart/src/main/java/service/SearchServiceClient.java

Lines changed: 85 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.microsoft.azure.search.samples.service;
1+
package service;
22

33
import javax.json.Json;
44
import javax.net.ssl.HttpsURLConnection;
@@ -16,36 +16,98 @@
1616
/**
1717
* This class is responsible for implementing HTTP operations for creating the index, uploading documents and searching the data*/
1818
public class SearchServiceClient {
19-
private final String _apiKey;
19+
private final String _adminKey;
20+
private final String _queryKey;
2021
private final String _apiVersion;
2122
private final String _serviceName;
2223
private final String _indexName;
2324
private final static HttpClient client = HttpClient.newHttpClient();
2425

25-
26-
public SearchServiceClient(String serviceName, String apiKey, String apiVersion, String indexName) {
26+
public SearchServiceClient(String serviceName, String adminKey, String queryKey, String apiVersion, String indexName) {
2727
this._serviceName = serviceName;
28-
this._apiKey = apiKey;
28+
this._adminKey = adminKey;
29+
this._queryKey = queryKey;
2930
this._apiVersion = apiVersion;
3031
this._indexName = indexName;
3132
}
3233

33-
private HttpRequest httpRequest(URI uri, String method, String contents)
34-
{
35-
return httpRequest(uri, _apiKey, method, contents);
36-
}
37-
3834
private static HttpResponse<String> sendRequest(HttpRequest request) throws IOException, InterruptedException {
3935
logMessage(String.format("%s: %s", request.method(), request.uri()));
4036
return client.send(request, HttpResponse.BodyHandlers.ofString());
4137
}
4238

39+
private static URI buildURI(Consumer<Formatter> fmtFn)
40+
{
41+
Formatter strFormatter = new Formatter();
42+
fmtFn.accept(strFormatter);
43+
String url = strFormatter.out().toString();
44+
strFormatter.close();
45+
return URI.create(url);
46+
}
47+
48+
public static void logMessage(String message) {
49+
System.out.println(message);
50+
}
51+
52+
public static boolean isSuccessResponse(HttpResponse<String> response) {
53+
try {
54+
int responseCode = response.statusCode();
55+
56+
logMessage("\n Response code = " + responseCode);
57+
58+
if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_ACCEPTED
59+
|| responseCode == HttpURLConnection.HTTP_NO_CONTENT || responseCode == HttpsURLConnection.HTTP_CREATED) {
60+
return true;
61+
}
62+
63+
// We got an error
64+
var msg = response.body();
65+
if (msg != null) {
66+
logMessage(String.format("\n MESSAGE: %s", msg));
67+
}
68+
69+
} catch (Exception e) {
70+
e.printStackTrace();
71+
}
72+
73+
return false;
74+
}
75+
76+
public static HttpRequest httpRequest(URI uri, String key, String method, String contents) {
77+
contents = contents == null ? "" : contents;
78+
var builder = HttpRequest.newBuilder();
79+
builder.uri(uri);
80+
builder.setHeader("content-type", "application/json");
81+
builder.setHeader("api-key", key);
82+
83+
switch (method) {
84+
case "GET":
85+
builder = builder.GET();
86+
break;
87+
case "HEAD":
88+
builder = builder.GET();
89+
break;
90+
case "DELETE":
91+
builder = builder.DELETE();
92+
break;
93+
case "PUT":
94+
builder = builder.PUT(HttpRequest.BodyPublishers.ofString(contents));
95+
break;
96+
case "POST":
97+
builder = builder.POST(HttpRequest.BodyPublishers.ofString(contents));
98+
break;
99+
default:
100+
throw new IllegalArgumentException(String.format("Can't create request for method '%s'", method));
101+
}
102+
return builder.build();
103+
}
104+
43105
public boolean indexExists() throws IOException, InterruptedException {
44106
logMessage("\n Checking if index exists...");
45107
var uri = buildURI(strFormatter -> strFormatter.format(
46108
"https://%s.search.windows.net/indexes/%s/docs?api-version=%s&search=*",
47109
_serviceName,_indexName,_apiVersion));
48-
var request = httpRequest(uri, "HEAD", "");
110+
var request = httpRequest(uri, _adminKey, "HEAD", "");
49111
var response = sendRequest(request);
50112
return isSuccessResponse(response);
51113
}
@@ -55,7 +117,7 @@ public boolean deleteIndex() throws IOException, InterruptedException {
55117
var uri = buildURI(strFormatter -> strFormatter.format(
56118
"https://%s.search.windows.net/indexes/%s?api-version=%s",
57119
_serviceName,_indexName,_apiVersion));
58-
var request = httpRequest(uri, "DELETE", "*");
120+
var request = httpRequest(uri, _adminKey, "DELETE", "*");
59121
var response = sendRequest(request);
60122
return isSuccessResponse(response);
61123
}
@@ -71,7 +133,7 @@ public boolean createIndex(String indexDefinitionFile) throws IOException, Inter
71133
var inputStream = SearchServiceClient.class.getResourceAsStream("index.json");
72134
var indexDef = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
73135
//Send HTTP PUT request to create the index in the search service
74-
var request = httpRequest(uri, "PUT", indexDef);
136+
var request = httpRequest(uri, _adminKey, "PUT", indexDef);
75137
var response = sendRequest(request);
76138
return isSuccessResponse(response);
77139
}
@@ -86,13 +148,15 @@ public boolean uploadDocuments(String documentsFile) throws IOException, Interru
86148
var inputStream = SearchServiceClient.class.getResourceAsStream(documentsFile);
87149
var documents = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
88150
//Send HTTP POST request to upload and index the data
89-
var request = httpRequest(endpoint, "POST", documents);
151+
var request = httpRequest(endpoint, _adminKey, "POST", documents);
90152
var response = sendRequest(request);
91153
return isSuccessResponse(response);
92154
}
93155

156+
public SearchOptions createSearchOptions() { return new SearchOptions();}
157+
94158
//Defines available search parameters that can be set
95-
public class SearchOptions {
159+
public static class SearchOptions {
96160

97161
public String select = "";
98162
public String filter = "";
@@ -125,94 +189,26 @@ public void searchPlus(String queryString)
125189
public void searchPlus(String queryString, SearchOptions options) {
126190

127191
try {
128-
String optionsString = createOptionsString(options);
192+
String optionsString = createOptionsString(options);
129193
var uri = buildURI(strFormatter -> strFormatter.format(
130194
"https://%s.search.windows.net/indexes/%s/docs?api-version=%s&search=%s%s",
131195
_serviceName, _indexName, _apiVersion, queryString, optionsString));
132-
var request = httpRequest(uri, "GET", null);
196+
var request = httpRequest(uri, _queryKey, "GET", null);
133197
var response = sendRequest(request);
134-
// logMessage("Full response:\n");
135-
// logMessage(response.body());
136198
var jsonReader = Json.createReader(new StringReader(response.body()));
137199
var jsonArray = jsonReader.readObject().getJsonArray("value");
138-
var resultsCount = jsonArray.size();
200+
var resultsCount = jsonArray.size();
139201
logMessage("Results:\nCount: " + resultsCount);
140202
for (int i = 0; i <= resultsCount - 1; i++) {
141203
logMessage(jsonArray.get(i).toString());
142204
}
143205

144206
jsonReader.close();
145207

146-
}
147-
catch (Exception e) {
148-
e.printStackTrace();
149-
}
150-
151-
}
152-
153-
private static URI buildURI(Consumer<Formatter> fmtFn)
154-
{
155-
Formatter strFormatter = new Formatter();
156-
fmtFn.accept(strFormatter);
157-
String url = strFormatter.out().toString();
158-
strFormatter.close();
159-
return URI.create(url);
160-
}
161-
162-
public static void logMessage(String message) {
163-
System.out.println(message);
164-
}
165-
166-
public static boolean isSuccessResponse(HttpResponse<String> response) {
167-
try {
168-
int responseCode = response.statusCode();
169-
170-
logMessage("\n Response code = " + responseCode);
171-
172-
if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_ACCEPTED
173-
|| responseCode == HttpURLConnection.HTTP_NO_CONTENT || responseCode == HttpsURLConnection.HTTP_CREATED) {
174-
return true;
175-
}
176-
177-
// We got an error
178-
var msg = response.body();
179-
if (msg != null) {
180-
logMessage(String.format("\n MESSAGE: %s", msg));
181-
}
182-
183-
} catch (Exception e) {
208+
}
209+
catch (Exception e) {
184210
e.printStackTrace();
185211
}
186212

187-
return false;
188-
}
189-
190-
private static HttpRequest httpRequest(URI uri, String apiKey, String method, String contents) {
191-
contents = contents == null ? "" : contents;
192-
var builder = HttpRequest.newBuilder();
193-
builder.uri(uri);
194-
builder.setHeader("content-type", "application/json");
195-
builder.setHeader("api-key", apiKey);
196-
197-
switch (method) {
198-
case "GET":
199-
builder = builder.GET();
200-
break;
201-
case "HEAD":
202-
builder = builder.GET();
203-
break;
204-
case "DELETE":
205-
builder = builder.DELETE();
206-
break;
207-
case "PUT":
208-
builder = builder.PUT(HttpRequest.BodyPublishers.ofString(contents));
209-
break;
210-
case "POST":
211-
builder = builder.POST(HttpRequest.BodyPublishers.ofString(contents));
212-
break;
213-
default:
214-
throw new IllegalArgumentException(String.format("Can't create request for method '%s'", method));
215-
}
216-
return builder.build();
217213
}
218-
}
214+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
SearchServiceName=<YOUR-SEARCH-SERVICE-NAME>
2+
SearchServiceAdminKey=<YOUR-ADMIN-KEY>
3+
SearchServiceQueryKey=<YOUR-QUERY-KEY>
4+
IndexName=hotels-quickstart
5+
ApiVersion=2019-05-06

quickstart/src/main/resources/com/microsoft/azure/search/samples/app/config.properties

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)