Posted in Software Development, Uncategorized

Common Github Markdown and Hidden Files


The power of Github lies in not merely using it as a source control. Rather, the power lies in using it as source control, bundled with a means of social media. Different files, features and the vary nature of git are designed to be a social media-communication tool to convey information to developers and scientist (they use git too.) For example, tagging lets people know you have releases. Seeing a branch communicates to others you are working on something and do not want to affect a major branch (like fixing a bug or adding a new feature.)

In looking at numerous git projects, I have seen a number of files that are hidden (beginning with a period) or are markdown (ending with “.md”) that occur repeatedly and are not related meant for third-party dependencies (like .babelrc for babel.js). I do not believe there is a standard. Nevertheless, they tend to have similar information across different projects. Here are the ones I frequently see:

.gitignore: Files you do not want git to pull into source control.
You can find a pre-made file for your current project off this site: https://www.gitignore.io

.editorconfig: Instructs text editors that support this on how to format code. It is best to have this to prevent a colossal geek-battle between the guy who uses 2-spaces with another guy who uses tab- this file is the definitive answer. A tutorial and sample file can be found at- http://editorconfig.org

README.md: Is information users see at the bottom of a git project. It informs them of the purpose. It is one of the first things they see despite it being it being at the bottom of the page. I have seen this vary from a basic introduction to a full blown documentation.

CONTRIBUTING.md: Provides guidelines everyone contributing to the code needs to follow (primarily developers).

COMMITTER.md: Provides guidelines to anyone with admin-power, like people that can have pull request on Master-branch. This might not be a consider problems in a small project. But it is something to consider in big codebases with core contributors scattered across difference time zones.

ChangeLog.md: A listing of what are changes in every release.

DEVELOPER.md: Instructions potential contributors on how to get the codebase running locally.

Author.txt: Listing of contributors

LICENSE.md or License.txt or License: This expresses to consumers of a code how the creator wants you to use it.  THIS IS IMPORTANT! It is vital for the code creators to write a license and the code consumer to read. If can only remember just one thing from this blog, remember that the license file should be given serious consideration. Some licenses say basically you can use the code but the creator is not liable for damages (MIT.) Some other license say if you use this code, you must open source the code you use it with; which may be your company’s $5 million codebase (like GPL.) Other say you can use the code for free if you do not modify it or contribute modifications to open source; otherwise you must pay the creators (I know MySQL used to have this.) Again, read the license. Ask the creator if you do not see a license.

You can do a web search and find information on licenses. One I like is wikipedia’s comparison- https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licenses

This list does not cover them all. There are  others like .gitattributes (used for configuring individual folders) and .mailmap (e-mail listing of contributors). Some third-party dependencies uses some like npm uses .npmignore. You can also create one yourself. I personally like to use .Acknowledgement to recognize anyone, codebases or sites that helped me out a lot while working on a project in Github. Some do not end with .md nor are hidden files but seems important like PATENTS in react.js

Posted in Software Development, Uncategorized

Creating a tag in git


This blog post shows you how to create an annotated tag in git; using github. I assume you already have git installed and have at least a working knowledge of the basis.

Steps
Create the tag
git tag -a v1.0.0 -m 'some message'

This is how you push tags to the server (regular push does not move over tags)
git push --tag

Miscellaneous
To view all tags:
git tag -v

To delete a tag (use the view option above to get the tag name )
git tag -d v1.0.0

Posted in Uncategorized

ChicagoVeg Website’s Release #2 now in Prod


The ChicagoVeg site: http://www.chicagoveg.com has been updated; with Release #2. The fixes include the follow:

  • Added new carousel images
  • Images now on most pages
  • Made Facebook page plugin responsive
  • Updated text

To see a list of issues addressed, see:
https://github.com/ChicagoVeg/ChicagoVegSite/issues?utf8=✓&q=%20milestone%3A”Release%202″%20

ChicagoVeg is the largest Chicagoland community for vegetarians, vegans, and raw foodists to socialize and meet like-minded people. We organize a range of fun activities and educational events in the city and the suburbs. Whether you are vegan or not vegan, we welcome everyone who is interested in a vegan/vegetarian/raw lifestyle for any reason – ethical, environmental, health, or spiritual. We support a nonjudgmental community where everyone can feel welcome to express their opinions, socialize, and have fun!

You can find meetings at: http://www.meetup.com/ChicagoVeg/

 

Posted in Uncategorized

My comments on Tyra Bank’s career


I watched a Youtube video on Tyra Banks (https://www.youtube.com/watch?v=FE057BWoLh4)and commented on it. My comments were inspired partially by words I read from Microsoft’s CEO Satya Nadella. I decided to  rephrase it a bit and write it in a blog post. This way, I can remind myself of it periodically. Here it is:

Tyra Banks did some things right. What gives you success today probably will not tomorrow. Therefore, you need career redirections periodically. She did that. She left the catwalk on top and when I believe her career with it would be on the downswing soon. Many have redirected their careers. Michael Jackson (bumble gum kid singer to teen pop/disco sing to adult r&b/funk/pop singer to Rock/pop/New Jack Swing singer), Michael Jordan (slasher/leaper/dunker to outside-shooter and passing the ball a little bit more), Microsoft (PC software maker to cloud provider) and many more others have rebranded and reinvented themselves.

You plan switches while still on top with the current direction. And you do little experiments to see whats next. Then you slowly but surely switch to the next thing. It’s not done necessarily in this order or way. Nevertheless, the point is; you do not want to be stuck without a wave to ride- you always need something big in your career to keep you in demand and on people’s mind and radar. I do not think she did this to a good degree. Kodak had nothing to fall on when digital photography made its business model obsolete. Its top brass did not see beyond what was making money for them when they were big and profitable and were slow to change with the changing consumer demand. Google currently really has nothing to fall on if its search business fails. Android, Google Maps and other of its big products really do not directly bring in income; they just help increase Google Search usage (its primary money-maker). Gmail and Google Cloud I believe are not profitable enough to run a huge company off of. Alphabet can help, just not right now.

Sometimes, despite best effort, things just do not work out for a while. Abraham Lincoln had a terrible life and was a straight up failure, before finally hitting it big and eventually becoming President and revered. John Travolta had a downtown time prior to getting “Pulp Fiction” to bring this back up. She now needs to find her “Pulp Fiction.” Plus, at a point, you have to use more wit and creativity and less beauty and other time-limited things to sell your goods. Beauty fads or gets stale to the eye; but wit and creativity is not limited by age or physicality.

 

 

Posted in How-to, Search, Software Development

Getting Up and Going with Elasticsearch


Introduction
This blog post explains how to get up and going with elasticsearch, on Ubuntu. Although for Ubuntu,  many of the concepts are applicable to Windows. This post focuses on the fundamentals and bare necessities to learn them. Therefore, while it will not get you ready for a Production release, it will help prepare you for the next level. Also, we will be using simple tooling; so reduce the extra learning that may incur. The pros and cons and comparison with other search servers is beyond the scope of this blog post. There are other introductory blogs post and a PluralSight video link if you desire different elasticsearch material to complement this blog post. They are listed in the references. There is a minor lean towards Bioinformatics/Molecular Biology. However, knowledge of these fields is not required to understand this blog post.

Elasticsearch is a search server for running full text search. It is a NOSQL, Distributed database engine. Search queries are performed over an index rather than actual documents. This makes it fast and reduces the need to store a duplicate copy of documents after indexing is complete. Lucene is used in the backend, akin to to SOLR.

Elasticsearch provides a RESTFUL interface for performing search task like querying and indexing. It can be used for searching blog content, analyzing logs and any other search needs. A growing use of it is in performing search in pairwise matches in genomic. This is what got me interested in this technology.

It is recommend you read the text AND try out the activities in the blog post.

 

Prerequisites Knowledge
There are some tools and standards you need a working knowledge as prerequisites. The first two are “RESTful” API calls  and “curl“. In addition to the hyperlinks on the terms, here are additional links: http://code.tutsplus.com/tutorials/a-beginners-guide-to-http-and-rest—net-16340. You also need a basic understanding of JSON (http://www.secretgeek.net/json_3mins). You need not master them; just be aware of their definition and have a big-picture understanding. 

 

Prerequisites Tooling
As per best practices, make sure your system is updated. Run this command in the command line:

sudo apt-get update

Next, get Java if you do not already have it. Run this command to check whether or not its installed:

java -version

Skip this step if its installed. If not, run this command to install (as of Mid-2016):

sudo apt-get install openjdk-8-jre

 

Installation
There are many ways to install elasticsearch. One way to install is to use the wget tool and  the other is to manually download and move the files to the right folder-

Option 1: Using command line

Run this command:

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-2.3.1.tar.gz

Move the content to the a folder your desire.

Note, the latest version at post time was 2.3.1. Adjust modify the above url based on the latest. The latest version number can be found at:

https://www.elastic.co/downloads/elasticsearch

Option 2: Manually downloading files

Another way to install it to to download the the relevant files and move them to an appropriate folder.

  1. Go to: https://www.elastic.co/downloads/elasticsearch
  2. Download the zip or tz.tar version to your local hard drive.
  3. Uncompress
  4. Move content to a folder you desire.

The names of the folders are self-explanatory. The config folder contain config files. The log files hold logging information, etc.

 

Configuration Adjustments
It is common to adjusting the configuration a bit while learning elasticsearch, to make identifying things a bit easier. Here are some:

  1. Open up the Elastic search folder
  2. Open up the config folder
  3. Look for a file called: “elasticsearch.yml” and open
  4. Look for “cluster.name.elasticsearch”. Change it to a name you will recognize.
  5. Look for “node.name” and change it to a name you will recognize.
  6. Look for “bootstap.mlockall”. Change it to “true”. This prevents memory swapping; the details are beyond the scope of this blog and something we need to eliminate from consideration for our intent and purpose.
  7. Look for network.host. Change it to “127.0.0.1”. This is your localhost.

These changes are useful for debugging (like node.name) or running queries (change network.host to localhost.)

 

Verify Elastic Search is Running
Open up the folder where elastic search was installed

Run this command in the command line:

/bin/ElasticSearch

This will start up elasticsearch service. You can kill this process anytime by using CTL-C. However, leave this process running for the sake of this tutorial, until completed.

Open up a new command prompt, while leaving the previous one running. In the new command line, type in this command:

curl -XGET ‘http://localhost:9200’

You do not have the Elastic Search service running if you see _hash with a long id, that means you have Elastic Search running.

 

Big Picture Story
You are now ready to try out elasticsearch. The big picture story of how it works is that you get your data stored as JSON, you use RESTful calls to store data into elasticsearch, elasticsearch indexes this and makes it available for search (done again via RESTful calls.) I recommend you keep this working idea in mind as learn to use elasticsearch.

 

Data to Store
Data is stored in elasticsearch as JSON. There is no restriction on what is a key and what is a value; as long as the data is JSON. For illustration purposes, we are going to examine a simple genetic search problem involving DNA sequences.

For our purposes, a DNA String is a collection contain a combination of the alphabets ‘A’, ‘C’, ‘T’ and ‘S’. A sequence is a string with biologically significant ordering (something measured).

Here is made-up data we will be using to illustration purposes:

 

{

“id”: “1”,

“name”: “Sample 1”,

“read_date”: “2014-01-02”,

“sequence”: “CAGCATACGAAAGAGCTTAAGGCACGCCAATTCGCACTGTCAGGGTCACTTGGGTGTTTTGCACTACCGTCAGGTACGCTAGTATGCGTTCTTCCTTCCA”

}

{

“id”: “2”,

“name”: “Sample 2”

“read_date”: “2015-03-04”,

“sequence”: “GAGGTATGTGGCTGCGTGGTCAAAAGTGCGGCATTCGTATTTGCTCCTCGTGTTTACTCTCACAAACTTGACCTGGAGATCAAGGAGATGCTTCTTGTGG”

}

{

“id”: “3”,

“name”: “Sample 3”,

“read_date”: “2016-04-05”,

“sequence”: “AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA”

}

 

 

Preparation for Indexing
Note, “curl” does not accept new line characters. They are shown for illustration-purposes. However,  a copy of every code snippet  without them is also provided, so you can run on a commandline.

You need to run a POST command to index a document. A POST command is used for updating. Here is the structure elasticsearch needs:

curl -XPOST ‘<URL>/<mapping>’

“Mapping” is like a data schema- tells elasticsearch the data field and how to store the data (number, boolean, etc) . “Type” can be considered something like a Relational databases’ table declaration- Tells elasticsearch what to expect . Properties are like relation databases’ columns

Here is a way of modeling the mapping for the DNA string used in this blog:

curl -XPOST “localhost:9200/dna” -d

‘{

“mappings”: {

“string”: {

“properties”: {

“id”: {

“type”: “integer”

},

“name”: {

“type”: “string”

},

“sequence”: {

“type”: “string”

},

“read_date”: {

“type”: “date”

}

}

}

}

}’

Here is the text with white spaces removes; more appropriate for the command line:

curl -XPOST “localhost:9200/dna” -d ‘{ “mappings”: { “string”: { “properties”: { “id”: { “type”: “integer” }, “name”: { “type”: “string” }, “sequence”: { “type”: “string” }, “read_date”: { “type”: “date” } } } } }’

There are other data types like binary (used for storing content like blobs), date (used for storing dates) and boolean (used for storing boolean values)

Run this command to see the indices:

curl -XGET localhost:9200/_cat/indices

You should see the dna entry. Now to verify the appropriate mapping was applied, run:

curl -XGET localhost:9200/dna/_mappings

 

Indexing Data
A POST command (used for creating new content) is used for adding content to the search index. The  structure of the command is:

[Elasticsearch URL]/<index>/<type>/[<id>]

The id is optional; it will be autogenerated if not provided.

1st content to add

curl -XPOST “localhost:9200/dna/string” -d

‘{

“id”: “1”,

“name”: “Sample 1”,

“read_date”: “2014-01-02”,

“sequence”: “CAGCATACGAAAGAGCTTAAGGCACGCCAATTCGCACTGTCAGGGTCACTTGGGTGTTTTGCACTACCGTCAGGTACGCTAGTATGCGTTCTTCCTTCCA”

}’

Here is the entry with whitespace removed, more appropriate for the command line:

 

curl -XPOST “localhost:9200/dna/string” -d ‘{ “id”: “1”, “name”: “Sample 1”, “read_date”: “2014-01-02”, “sequence”: “CAGCATACGAAAGAGCTTAAGGCACGCCAATTCGCACTGTCAGGGTCACTTGGGTGTTTTGCACTACCGTCAGGTACGCTAGTATGCGTTCTTCCTTCCA” }’

2nd content to add

curl -XPOST “localhost:9200/dna/string” -d

{

“id”: “2”,

“name”: “Sample 2”,

“read_date”: “2015-03-04”,

“sequence”: “GAGGTATGTGGCTGCGTGGTCAAAAGTGCGGCATTCGTATTTGCTCCTCGTGTTTACTCTCACAAACTTGACCTGGAGATCAAGGAGATGCTTCTTGTGG”

}’

Here is the entry with whitespace removes, more appropriate for the command line:

curl -XPOST “localhost:9200/dna/string” -d ‘{ “id”: “2”, “name”: “Sample 2”, “read_date”: “2015-03-04”, “sequence”: “GAGGTATGTGGCTGCGTGGTCAAAAGTGCGGCATTCGTATTTGCTCCTCGTGTTTACTCTCACAAACTTGACCTGGAGATCAAGGAGATGCTTCTTGTGG” }’

3rd content to add

curl -XPOST “localhost:9200/dna/string” -d

‘{

“id”: “3”,

“Name”: “Sample 3”,

“read_date”: “2016-04-05”,

“sequence”: “AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA”

}’

Here is the entry with whitespace removes, more appropriate for the command line:

curl -XPOST “localhost:9200/dna/string” -d ‘{ “id”: “3”, “Name”: “Sample 3”, “read_date”: “2016-04-05”, “sequence”: “AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA” }’

 

 

Basic Search
A Basic Search is use when you want to quickly search for data and do not need any addons. The structure of the Basic Search is:

curl -XGET <URL>/_search?q=<field>:<search term>

To illustrate, lets say there is a need to find which DNA string contains the sequence: “AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA”.

curl -XGET localhost:9200/dna/_search?q=sequence:AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA

The result you get back (formated) would be similar to:

{

“took”: 2,

“timed_out”: false,

“_shards”: {

“total”: 5,

“successful”: 5,

“failed”: 0

},

“hits”: {

“total”: 1,

“max_score”: 0.30685282,

“hits”: [

{

“_index”: “dna”,

“_type”: “string”,

“_id”: “AVSRjGaZcdfh2Ha9smfL”,

“_score”: 0.30685282,

“_source”: {

“id”: “3”,

“Name”: “Sample 3”,

“read_date”: “2016-04-05”,

“sequence”: “AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA”

}

}

]

}

}

The value “_id” (in hits) will depend on your machine (not, we set “id” and not “_id”.) The important keys in the result are “hits” and “sources”. The “hits” tells you what matches and the source provides you back the data.

You can find a substring in the sequence. Lets say you want all entries that contain the substring “AAAA”, you use the wildcard ‘*’ to tell elasticSearch to look for a substring.

Here is the query:

curl -XGET localhost:9200/dna/_search?q=sequence:*AAAA*

The result you see should be similar to:

{

“took”: 7,

“timed_out”: false,

“_shards”: {

“total”: 5,

“successful”: 5,

“failed”: 0

},

“hits”: {

“total”: 2,

“max_score”: 1,

“hits”: [

{

“_index”: “dna”,

“_type”: “string”,

“_id”: “AVSRjGaZcdfh2Ha9smfL”,

“_score”: 1,

“_source”: {

“id”: “3”,

“Name”: “Sample 3”,

“read_date”: “2016-04-05”,

“sequence”: “AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA”

}

},

{

“_index”: “dna”,

“_type”: “string”,

“_id”: “AVSRij7Tcdfh2Ha9smcT”,

“_score”: 1,

“_source”: {

“id”: “2”,

“name”: “Sample 2”,

“read_date”: “2015-03-04”,

“sequence”: “GAGGTATGTGGCTGCGTGGTCAAAAGTGCGGCATTCGTATTTGCTCCTCGTGTTTACTCTCACAAACTTGACCTGGAGATCAAGGAGATGCTTCTTGTGG”

}

}

]

}

}

Query DSL
The Basic Search is fine for some cases, but other cases requires more sophisticated techniques like filtering, changing the search algorithm (analyzer), searching for phrases and other options. Elasticsearch has a DSL (domain specific language) made available that can help with this. This blog post will not go into details on them all; but will help you enough to go find out others and us them as needed.

The Basic Search we did earlier can be re-written with the DSL in this structure:

<GET command> <URL>/<index name>/_search

{

“query”: {

“match”: {

<field>: <search term>

}

}

}

The query key tells Elasticsearch to perform a search. The match key tells Elasticsearch to  look for each term in the search term, divided by token (details to beyond the scope of this blog, for conservation, lets say each word in a phrase.)

Here is an example:

 

Here is an example:

curl -XGET “localhost:9200/dna/_search” -d

‘{

“query”: {

“match”: {

“sequence”: “AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA”

}

}

}’

Command line:

curl -XGET “localhost:9200/dna/_search” -d ‘{ “query”: { “match”: { “sequence”: “AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA” } } }’

The result:

{

“took”: 3,

“timed_out”: false,

“_shards”: {

“total”: 5,

“successful”: 5,

“failed”: 0

},

“hits”: {

“total”: 1,

“max_score”: 0.30685282,

“hits”: [

{

“_index”: “dna”,

“_type”: “string”,

“_id”: “AVSRjGaZcdfh2Ha9smfL”,

“_score”: 0.30685282,

“_source”: {

“id”: “3”,

“Name”: “Sample 3”,

“read_date”: “2016-04-05”,

“sequence”: “AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA”

}

}

]

}

}

You can search for a phrase rather than for individual words. The match_phrase key helps with this.

This can be expanded to perform filtering. This can eliminate irrelevant data from the search results. The format of it is:

<GET command> <URL>/<index name>/_search

{

“filtered”: {

“filter”: {

<filter option>: {

<field>: {

<filter command>: <filtered-by term>

}

},

“query”: {

“match”: {

<field>: <search term>

}

}

}

}

To illustrate, in the search result, lets say we want only the result from after a January 1st, 2016 (the selected date is the same for both the British and American date-structure systems):

 

Homework
These are a collection of exercises to test your understanding of this blog and help you get started in discovering another feature of Elastic search.

Indices need to change in the real world as users update content. Elastic search provides this   functionality by supporting the PUT command.

Use the PUT command to update the third index’s sequence to:

GAGTATCATGGAGCCCATGGTTGAATGAGTCCAATAACGAACTTCGACATGATAAAGTCCCCCCCTCGCGACTTCCAGAGAAGAAGACTACTGAGTTGAG

Once done, search for do these exercises

  1. Search for:  AACTGGACAACGCATCAACGCAACGGATCTACGTTACAGCGTGCATAGTGAAAACGGAGTTGCTGACGACGAAAGCGACATTGGGATCTGTCTGTTGTCA
  2.  Search for:  GAGTATCATGGAGCCCATGGTTGAATGAGTCCAATAACGAACTTCGACATGATAAAGTCCCCCCCTCGCGACTTCCAGAGAAGAAGACTACTGAGTTGAG
  3.  Search for: *AAAA*
  4. Search for: *TTCGACATG*

Note: for (3) and (4), the ‘*’ tells elasticsearch to search for a substring.

Being able to complete these task shows you understand this blog post. If unable to, I recommend you re-read this blog post and follow along with the tutorial on a computer.

Notes

  1. https://www.elastic.co: This is Elastic Search’s URL. Note, there is no ‘m’ in the end
  2. https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html: This is a free book about Elastic search, online. You have to buy an e-book or physical book if you want to read it offline (this trend is becomes popular). I recommend you look at this book after reading this blog post and are ready for more advanced material.
  3. My current thought is that developing an analyzer for processing genomic data would be a great Bioinformatic problem and helpful in Precision medicine studies. I have not investigated it much as I am occcupied with studies other topics. But its on the back of my mind.
  4. Zachary Tong (https://www.elastic.co/blog/author/zachary-tong) is a name I saw a number of time when I begun studying Elastic search. Like him, I too am interested in Neuroscience, Bioformatics and Software Development. He posted a slide involving Gene sequencing with Bioinformatics that is worth a glance in my opinion- http://www.slideshare.net/ZacharyTong/boston-meetupgoingorganic
  5. Elastic BV (https://www.elastic.co/subscriptions) provide commercial support. I believe paid support makes an open source project more appealing. It tells you that there are a few people with an invested interest to maintain the code base and can help when a problem has reached a C-Level executive during bonus-paying time and you need a miracle.
  6. https://aws.amazon.com/elasticsearch-service/ Amazon web services supports hosting Elastic search in the cloud.
  7. Neflix, Github, Quora, Foursquare, Stack Exchange (who own stackoverflow.com): Are a few of the companies using elasticsearch. It is proof that it is a valuable tool that can handle huge search tasks.

 

References

  1. http://joelabrahamsson.com/ Great tutorial about how to get started with Elastic Search. It has a lot of details.
  2. https://troubleshootguru.wordpress.com/2014/11/19/how-to-install-elasticsearch-on-centos-rhel-2/ This is another tutorial. Has has less cruft, so good if you just need to know what to put in the command line.
  3. http://faculty.ucr.edu/~mmaduro/random.htm This is a tool I used to generate random genetic sequences.
  4. https://www.pluralsight.com/courses/elasticsearch-for-dotnet-developers A great PluralSight training video on Elastic Search.
  5. http://code.tutsplus.com/tutorials/a-beginners-guide-to-http-and-rest—net-16340 Overview of RESTful calls and curl.
  6. http://www.secretgeek.net/json_3mins JSON tutorial