Challenge Overview

Project Overview

NASA needs your help building an enterprise search portal. NASA & Topcoder have completed the design and frontend code for a search interface that is intuitive for beginner to advanced users which allows users to search against NASA intranet as well as public internet data sets. 

As part of this project, we are integrating a new search engine (Solr Cloud) which will serve as a backend to the Enterprise Search User Interface and seek to expand the capabilities of the existing application. Please see below for contest specific requirements.

Challenge Overview

We have already completed the frontend design + prototype for the search portal. We also have a Solr Cloud search platform (backend) with data.

As part of this challenge, you will need to create a web application server to host the frontend and integrate it with the Solr Cloud Platform to allow users to execute search queries.

Submission Guidelines

----Deployment Guide. Please use this template.
----The frontend and the server code hosting it.



Final Submission Guidelines

----Deployment Guide. Please use this template.
----The frontend and the server code hosting it.

Technology Background

The existing UI Prototype for the challenge can be found here. Check it out and familiarize yourself with the front end for this application. There’s also a demo of this app, running here. 

We are using Apache Solr Cloud for our enterprise search needs. NASA has provided us with a Docker image in which Solr Cloud has been installed. You can find the Docker image link in the contest forum. You will find the installation steps at the end of this document.

We are providing this to allow you to familiarize yourself with the kind of dataset that the application will be dealing with.

With this background, you should now be able to proceed with the requirements for the integration which are as follows:
----Host the UI Prototype in a web application server. Use Node.js (v4.1.1) for this.
----Organize and update the UI Prototype with AngularJS. Update the views and create controllers using AngularJS wherever appropriate.
----The main search in the UI should work. User should be able to enter a query and your application should interface with Solr Cloud to use the query to search and respond with the data returned by Solr Cloud.
----Filter in the UI should work. User should be able to exclude words and exclude domains. For excluding domains, you will refer to the “host” field in the data schema.
----User should be able to save their search query. In the UI Prototype, you can find this after the search results are displayed - on the left sidebar at the bottom. You can store this using the HTML5 local storage.
----On displaying the results, user should be able to restrict the number of results shown - Display n items / page feature which you will find at the bottom of the User Interface.
----On displaying the results, you should show the total number of results returned - you can find this just above the results display section in the UI Prototype.
----Finally, you should specify the amount of time taken to search for the query - this is located next to the total number of results in the UI Prototype. Note that this should indicate the time taken for Solr to search and not the time taken for the HTTP request -> response cycle.

Your application should take care of the following:
----Your application design should allow the application to scale - as you can see in the UI Prototype, we will be integrating many more feature such as location based filtering, date based filtering, result type based filtering etc in future challenges. Separate the controllers and services and follow the DRY principle. It should be easy for any user or developer to take the application and update it. Thus, follow best practices and  conventions and use your best judgement.
----You are expected to use gulp or grunt. Have lint checks and HTML5 compatibility checks. Provide two environments - one for development and one for production. While the production version will minify any frontend scripts, the development version should not. Essentially, it should be easy to start the application in production and development modes.
----Make sure that you provide the Solr Cloud URL as a configuration.

Contest Resources

----Solr Cloud: http://lucene.apache.org/solr/
----Frontend Code: https://github.com/NASA-Tournament-Lab/Search-User-Interface
----Fronend Demo Link: https://demo.topcoder.com/OPM/NSP/prototype/index.html 

Installation of the Solr Docker image

To install this image, make sure that you have Docker installed and running successfully. Installation steps for Docker is out-of-scope. Your best approach is to visit the official Docker website and get the installation steps for your environment.

Once you have downloaded the image, you can import and run it as follows (run the commands in the same location where the image was downloaded / located):

$ docker import nasasolr.gz
$ docker run -d -p 8983:8983 -p 9983:9983 {image name} /bin/bash -c "/opt/solr/bin/solr/ -c -m 2G; while true; do sleep 3600; done;"

You can now visit http://localhost:8983/solr to get the Solr interface. You will find that this contains only one core / collection which you can work with.

ELIGIBLE EVENTS:

2016 TopCoder(R) Open

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30051499