search search search
TRANSCRIPT
Search, Search, Search
Andy Dai [email protected]
ElasticSearch
Distributed Search Engine
• Open Source
• Distributed
• Document-based
• JSON over HTTP
Who Use ElasticSearch
Example. GitHub
Document Based
• JSON
• Dynamic Schema
RDBMS v.s ElasticSearch
DATABASE
INDEX
TABLE
TYPE
ROW
DOCUMENT
COLUMN
FIELD
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
Query a documentGET /taipeipy/user/1
Do some simple search
GET /taipeipy/user/_search
GET /taipeipy/user/_search?q=last_name:Smith
Search with DSL
GET /taipeipy/user/_search { “query”: { “match”: { “last_name”: “smith” } } }
Search with DSLGET /taipeipy/user/_search { "query" : { "filtered" : { "filter" : { "range" : { "age" : { "gt" : 30 } } }, "query" : { "match" : { "last_name" : "smith" } } } } }
Full Text Search
GET /taipeipy/user/_search { “query”: { “match”: { “about”: “love programming” } } }
Use Python to interact with ElasticSearch
• REST API
• elasticsearch-py
• elasticsearch-dsl-py
elasticsearch-py
• Low-level
• dict to json
from elasticsearch import Elasticsearch es = Elasticsearch() result = es.search(body={ 'query': { 'match': { 'last_name': 'smith' } } })
from elasticsearch_dsl import Search s = Search(using=es) result = s.query( 'match', last_name='smith').execute()
ElasticSearch-DSL
ElasticSearch-DSL
• Say no to {}
• High Level API
• Combined query
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()
Query
• Q(‘match’, title=‘python’) == Match(title=‘python’)
• Q(‘match’, title=‘python’) == Q({‘match’, {‘title’: ‘python’})
• Boolean operator &, |
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()
DEMO
Reference
• https://www.elastic.co
• http://elasticsearch-dsl.readthedocs.org
• Another option - http://haystacksearch.org