Skip to content

Instantly share code, notes, and snippets.

@SalaSuresh
Created May 18, 2018 03:36
Show Gist options
  • Save SalaSuresh/6c63f91270f7eeaa067370f5f72acc4b to your computer and use it in GitHub Desktop.
Save SalaSuresh/6c63f91270f7eeaa067370f5f72acc4b to your computer and use it in GitHub Desktop.
Google app engine search API example using java. refer the this link for Google app engine standard project (https://drive.google.com/file/d/1nAgKt9aCPpuc64InSN0dGg9eF_sDutvg/view?usp=sharing).
package com.suresh.search_practice;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.search.Document;
import com.google.appengine.api.search.Field;
import com.google.appengine.api.search.Index;
import com.google.appengine.api.search.IndexSpec;
import com.google.appengine.api.search.PutException;
import com.google.appengine.api.search.SearchServiceFactory;
import com.google.appengine.api.search.StatusCode;
@WebServlet(urlPatterns = { "/show_db_servlet" })
public class DBServlet extends HttpServlet {
private DatastoreService mDatastoreService;
private static final String TABLE_NAME = "Android Apps";
private static final String PACKAGE_NAME = "Package";
private static final String APP_NAME = "App Name";
private static final String DEVELOPER_NAME = "Dev Name";
private static final String CATEGORY = "Category";
private static final String ICON_URL = "Icon";
private static final String INDEX_NAME = "Index_Name";
private String mPackageName = "";
private String mAppName = "";
private String mDevName = "";
private String mCategory = "";
private String mIconUrl = "";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
mDatastoreService = DatastoreServiceFactory.getDatastoreService();
for (int i = 0; i < 10; i++) {
mPackageName = "com.companey.app" + i;
mAppName = "App Name_" + i;
mDevName = "Developer_" + i;
mCategory = "Category_" + i;
mIconUrl = "Icon_" + i;
Entity entity = new Entity(TABLE_NAME, mPackageName);
entity.setProperty(PACKAGE_NAME, mPackageName);
entity.setProperty(APP_NAME, mAppName);
entity.setProperty(DEVELOPER_NAME, mDevName);
entity.setProperty(CATEGORY, mCategory);
entity.setProperty(ICON_URL, mIconUrl);
mDatastoreService.put(entity);
Document newDoc = Document.newBuilder().setId(mPackageName)
.addField(Field.newBuilder().setName("packageName").setText(mPackageName))
.addField(Field.newBuilder().setName("appName").setText(mAppName))
.addField(Field.newBuilder().setName("devName").setText(mDevName))
.addField(Field.newBuilder().setName("category").setText(mCategory))
.addField(Field.newBuilder().setName("iconUrl").setText(mIconUrl)).build();
indexDocument(INDEX_NAME, newDoc);
}
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().print("show_db_servlet");
}
public void indexDocument(String indexName, Document document) {
IndexSpec indexSpec = IndexSpec.newBuilder().setName(indexName).build();
Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec);
try {
index.put(document);
} catch (PutException e) {
if (StatusCode.TRANSIENT_ERROR.equals(e.getOperationResult().getCode())) {
// retry putting the document
}
}
}
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="content-type"
content="application/xhtml+xml; charset=UTF-8" />
<title>Hello App Engine</title>
</head>
<body>
<table>
<tr>
<td colspan="2" style="font-weight: bold;">Available Servlets:</td>
</tr>
<tr>
<td><a href='/search_servlet'>Search</a></td>
</tr>
<tr>
<td><a href='/show_db_servlet'>Show DB</a></td>
</tr>
</table>
</body>
</html>
package com.suresh.search_practice;
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.search.Document;
import com.google.appengine.api.search.Index;
import com.google.appengine.api.search.IndexSpec;
import com.google.appengine.api.search.PutException;
import com.google.appengine.api.search.Results;
import com.google.appengine.api.search.ScoredDocument;
import com.google.appengine.api.search.SearchServiceFactory;
import com.google.appengine.api.search.StatusCode;
@WebServlet(name = "SearchServlet", urlPatterns = { "/search_servlet" })
public class SearchServlet extends HttpServlet {
private DatastoreService mDatastoreService;
private static final String TABLE_NAME = "Android Apps";
private static final String PACKAGE_NAME = "Package";
private static final String APP_NAME = "App Name";
private static final String DEVELOPER_NAME = "Dev Name";
private static final String CATEGORY = "Category";
private static final String ICON_URL = "Icon";
private static final String INDEX_NAME = "Index_Name";
private String searchText = "app name_3";
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
mDatastoreService = DatastoreServiceFactory.getDatastoreService();
Query query = new Query(TABLE_NAME);
PreparedQuery preparedQuery = mDatastoreService.prepare(query);
for (Entity entity : preparedQuery.asIterable()) {
String packageName = entity.getProperty(PACKAGE_NAME).toString();
String appName = entity.getProperty(APP_NAME).toString();
String devName = entity.getProperty(DEVELOPER_NAME).toString();
String category = entity.getProperty(CATEGORY).toString();
String iconUrl = entity.getProperty(ICON_URL).toString();
System.out.println(packageName);
}
searchData(searchText);
}
private void searchData(String searchText) {
System.out.println("SEARCH TEXT: " + searchText);
Results<ScoredDocument> results = retrieveDocuments(searchText);
System.out.println("DATA: " + (results.getNumberFound()));
for (ScoredDocument scoredDocument : results) {
System.out.println("loop");
String packageName = scoredDocument.getOnlyField("packageName").getText();
String appName = scoredDocument.getOnlyField("appName").getText();
String devName = scoredDocument.getOnlyField("devName").getText();
String category = scoredDocument.getOnlyField("category").getText();
String iconUrl = scoredDocument.getOnlyField("iconUrl").getText();
System.out.println("Package Name: " + packageName + " App Name: " + appName + " devName: " + devName
+ " category: " + category + " Icon Url: " + iconUrl);
}
}
public void indexDocument(String indexName, Document document) {
IndexSpec indexSpec = IndexSpec.newBuilder().setName(indexName).build();
Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec);
try {
index.put(document);
} catch (PutException e) {
if (StatusCode.TRANSIENT_ERROR.equals(e.getOperationResult().getCode())) {
// retry putting the document
}
}
}
public Document retrieveDocument(String documentId) {
IndexSpec indexSpec = IndexSpec.newBuilder().setName(INDEX_NAME).build();
Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec);
return index.get(documentId);
}
public Results<ScoredDocument> retrieveDocuments(String searchText) {
IndexSpec indexSpec = IndexSpec.newBuilder().setName(INDEX_NAME).build();
Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec);
return index.search(searchText);
}
}
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment