search search search

24
Search, Search, Search Andy Dai [email protected]

Upload: andy-dai

Post on 21-Jan-2018

390 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Search search search

Search, Search, Search

Andy Dai [email protected]

Page 2: Search search search

ElasticSearch

Page 3: Search search search

Distributed Search Engine

• Open Source

• Distributed

• Document-based

• JSON over HTTP

Page 4: Search search search

Who Use ElasticSearch

Page 5: Search search search

Example. GitHub

Page 6: Search search search

Document Based

• JSON

• Dynamic Schema

Page 7: Search search search
Page 8: Search search search

RDBMS v.s ElasticSearch

DATABASE

INDEX

TABLE

TYPE

ROW

DOCUMENT

COLUMN

FIELD

Page 9: Search search search

Create a document

PUT /taipeipy/user/1 { "first_name" : "John", "last_name" : "Smith", "age" : 25, "about": "I love programming", "interests": [ "django", "python" ] }

index type id

Page 10: Search search search

Query a documentGET /taipeipy/user/1

Page 11: Search search search

Do some simple search

GET /taipeipy/user/_search

GET /taipeipy/user/_search?q=last_name:Smith

Page 12: Search search search

Search with DSL

GET /taipeipy/user/_search { “query”: { “match”: { “last_name”: “smith” } } }

Page 13: Search search search

Search with DSLGET /taipeipy/user/_search { "query" : { "filtered" : { "filter" : { "range" : { "age" : { "gt" : 30 } } }, "query" : { "match" : { "last_name" : "smith" } } } } }

Page 14: Search search search

Full Text Search

GET /taipeipy/user/_search { “query”: { “match”: { “about”: “love programming” } } }

Page 15: Search search search

Use Python to interact with ElasticSearch

• REST API

• elasticsearch-py

• elasticsearch-dsl-py

Page 16: Search search search

elasticsearch-py

• Low-level

• dict to json

Page 17: Search search search

from elasticsearch import Elasticsearch es = Elasticsearch() result = es.search(body={ 'query': { 'match': { 'last_name': 'smith' } } })

Page 18: Search search search

from elasticsearch_dsl import Search s = Search(using=es) result = s.query( 'match', last_name='smith').execute()

ElasticSearch-DSL

Page 19: Search search search

ElasticSearch-DSL

• Say no to {}

• High Level API

• Combined query

Page 20: Search search search

Design

from elasticsearch_dsl import Search, Q s = Search(using=es) result = s.query( Q(‘match', last_name=‘smith’) & \ Q(‘match', first_name=‘John’) ).execute()

Page 21: Search search search

Query

• Q(‘match’, title=‘python’) == Match(title=‘python’)

• Q(‘match’, title=‘python’) == Q({‘match’, {‘title’: ‘python’})

• Boolean operator &, |

Page 22: Search search search

Store Datafrom elasticsearch_dsl import DocType, String

class PostDoc(DocType): title = String() content = String()

class Meta: index = 'blog'

PostDoc.init() doc = PostDoc(title=‘test’, content=‘content’) doc.save()

Page 23: Search search search

DEMO

Page 24: Search search search

Reference

• https://www.elastic.co

• http://elasticsearch-dsl.readthedocs.org

• Another option - http://haystacksearch.org