Created
May 18, 2018 03:34
-
-
Save SalaSuresh/fd10b9be12a1b784e4b1bac37094e66f to your computer and use it in GitHub Desktop.
Google app engine search API example using java.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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