You have your Solr server set-up, now what? You want people to be able to perform queries and have some control over what can be input, well you need a Java Web Service! This is a short guide on how to create your Java Web Service which may not be tailored to your particular needs but you can tweak it as you please.
Set-Up
To set up the Java Web Service you will need:
- Netbeans 7 with GlassFish
- Solr Set-up and Running
Steps Involved
Project Set-Up
- Start Netbeans and Go to
File→New Project→Java Web→Web Applicationsand then hitNext. - Give your project a name and then hit
Next - Ensure that Glassfish is the selected server and hit
Finish
HelloResource.java
- Right click the Default Package and create a new
Java Classand call itHelloResource.java - Enter the following code:
import java.net.URL; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URLConnection; /** * * @author alamil */ //Looks for hello in the pathname @Path("hello") public class HelloResource { /** * * @param arg * @param rows * @return */ @GET @Path("/query") //Looks for /query in the pathname @Produces("text/xml") //Returns xml public String hello(@QueryParam("q") String arg, @QueryParam("rows") String rows, @QueryParam("filter") String filter){ //Variables String xmldoc = ""; String inputLine; //If the user has not selected a number of rows to display then 50 is set to defualt if (rows == null) rows = "50"; //If the user has not selected fields to filter on then it uses the default if (filter == null) filter = "id,title"; try{ //Trys to connect to the Solr Server with the query URL solr = new URL("http://localhost:8080/solr/select?q=url:(" + arg.replaceAll(" ","%20") + ")^25%20text:(" + arg.replaceAll(" ","%20") + ")&fl=" + filter + "&rows=" + rows); URLConnection yc = solr.openConnection(); //Reads the returned xml file from the server BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); while ((inputLine = in.readLine()) != null){ xmldoc = xmldoc + inputLine; } //Close the file in.close(); //Return the xml document (Replacing the %20's with spaces) return xmldoc.replaceAll("%20", " "); }catch (Exception e){ return "Exception"; } } }
RESTConfig.java
- Right click the Default Package and create a new
Java Classand call itRESTConfig.java - Enter the following code:
import javax.ws.rs.core.Application; import javax.ws.rs.ApplicationPath; /** * * @author alamil */ @ApplicationPath("SearchInt") public class RESTConfig extends Application { }
Testing
- Go to
Run→Run Projectand your server should start - A browser window will open to the
index.htmlpage that is there which you can tweak and edit to your own liking - Start your solr server
- In your browser, Navigate to:
localhost:8080/HelloRest/SearchInt/hello/query?q=[query term]&filter=[filter term]&rows=[rows]
- The input parameters set up are:
- q=… : representing the keywords in the query
- rows=… : representing the number of rows you wish to have returned
- filter=… :representing which fields are displayed to the user
Your server and Solr server may be running from the same port which can cause problems