Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Advanced Search for your Legacy application - Joker 2016

Elastic Co
October 15, 2016

Advanced Search for your Legacy application - Joker 2016

Talk given at Joker 2016, Saint Petersburg, Russia
http://jokerconf.com/en/talks/advanced-search-for-your-legacy-application/

How do you mix SQL and NoSQL worlds without starting a messy revolution?

This live coding talk will show you how to add Elasticsearch to your legacy application without changing all your current development habits. Your application will suddenly have advanced search features, all without the need to write complex SQL code!

David will start from a RestX, Hibernate and Postgresql/MySQL based application and will add a complete integration of Elasticsearch.

Elastic Co

October 15, 2016
Tweet

More Decks by Elastic Co

Other Decks in Programming

Transcript

  1. 2

  2. 6 6

  3. Some data CREATE TABLE user ( name VARCHAR(100), comments VARCHAR(1000)

    ); INSERT INTO user VALUES ('David Pilato', 'Developer at elastic'); INSERT INTO user VALUES ('Malloum Laya', 'Worked with David at french customs service'); INSERT INTO user VALUES ('David Gageot', 'Engineer at Docker'); INSERT INTO user VALUES ('David David', 'Who is that guy?'); 7
  4. Search on term SELECT * FROM user WHERE name="David"; Empty

    set (0,00 sec) INSERT INTO user VALUES ('David Pilato', 'Developer at elastic'); INSERT INTO user VALUES ('Malloum Laya', 'Worked with David at french customs service'); INSERT INTO user VALUES ('David Gageot', 'Engineer at Docker'); INSERT INTO user VALUES ('David David', 'Who is that guy?'); 8
  5. Search like SELECT * FROM user WHERE name LIKE "%David%";

    +--------------+----------------------+ | name | comments | +--------------+----------------------+ | David Pilato | Developer at elastic | | David Gageot | Engineer at Docker | | David David | Who is that guy? | +--------------+----------------------+ INSERT INTO user VALUES ('David Pilato', 'Developer at elastic'); INSERT INTO user VALUES ('Malloum Laya', 'Worked with David at french customs service'); INSERT INTO user VALUES ('David Gageot', 'Engineer at Docker'); INSERT INTO user VALUES ('David David', 'Who is that guy?'); 9
  6. Search like SELECT * FROM user WHERE name LIKE "%David%Pilato%";

    +--------------+----------------------+ | name | comments | +--------------+----------------------+ | David Pilato | Developer at elastic | +--------------+----------------------+ INSERT INTO user VALUES ('David Pilato', 'Developer at elastic'); INSERT INTO user VALUES ('Malloum Laya', 'Worked with David at french customs service'); INSERT INTO user VALUES ('David Gageot', 'Engineer at Docker'); INSERT INTO user VALUES ('David David', 'Who is that guy?'); 10
  7. Search like with inverted terms SELECT * FROM user WHERE

    name LIKE "%Pilato%David%"; Empty set (0,00 sec) INSERT INTO user VALUES ('David Pilato', 'Developer at elastic'); INSERT INTO user VALUES ('Malloum Laya', 'Worked with David at french customs service'); INSERT INTO user VALUES ('David Gageot', 'Engineer at Docker'); INSERT INTO user VALUES ('David David', 'Who is that guy?'); 11
  8. Search in two fields SELECT * FROM user WHERE name

    LIKE "%David%" OR comments LIKE "%David%"; +--------------+---------------------------------------------+ | name | comments | +--------------+---------------------------------------------+ | David Pilato | Developer at elastic | | Malloum Laya | Worked with David at french customs service | | David Gageot | Engineer at Docker | | David David | Who is that guy? | +--------------+---------------------------------------------+ INSERT INTO user VALUES ('David Pilato', 'Developer at elastic'); INSERT INTO user VALUES ('Malloum Laya', 'Worked with David at french customs service'); INSERT INTO user VALUES ('David Gageot', 'Engineer at Docker'); INSERT INTO user VALUES ('David David', 'Who is that guy?'); 12
  9. DATABASE SQL ETL using a ETL WEB APP HTTP /

    REST JDBC ELASTICSEARCH REST / JSON 17
  10. think document! • Change your mindset: ‒ Forget SQL! ‒

    Index what you want to find • A document ‒ A JSON object ‒ Core field types (string, numbers, booleans) ‒ Complex field types (arrays, objects) ‒ Additional field types (geo points, geo shapes) 18 18
  11. DATABASE SQL direct connection WEB APP HTTP / REST JDBC

    ES-CLIENT ELASTICSEARCH REST / JSON 20
  12. JSON document design PUT /person/person/1 { "name":"Joe Pink", "dateOfBirth":"1971-12-26", "address_id":"2",

    "marketing_id":"3" } PUT /person/address/2 { "city":"Paris", "country":"France" } PUT /person/marketing/3 { "cars":1000, "food":1500 } 21
  13. JSON document design PUT /person/person/1 { "name":"Joe Pink", "dateOfBirth":"1971-12-26", "address":{

    "city":"Paris", "country":"France" }, "marketing":{ "cars":1000, "food":1500 } } 22
  14. direct connection demo time $ git clone https://github.com/dadoonet/legacy-search.git $ git

    checkout 01-direct $ git checkout 02-bulk $ git checkout 03-mapping $ git checkout 04-aggs $ git checkout 05-compute $ mvn clean install jetty:run $ cat README.markdown 23
  15. DATABASE SQL using brokers WEB APP HTTP / REST JDBC

    ES-CLIENT ELASTICSEARCH REST / JSON 25
  16. ELASTICSEARCH REST / JSON using brokers WEB APP HTTP /

    REST JDBC ES-CLIENT DATABASE SQL 26
  17. ELASTICSEARCH REST / JSON using brokers WEB APP HTTP /

    REST JDBC ES-CLIENT DATABASE SQL 27