Elasticsearch Query DSL - Berlin Buzzwords · Elasticsearch Query DSL … not just for wizards....

Post on 02-Jul-2018

225 views 0 download

Transcript of Elasticsearch Query DSL - Berlin Buzzwords · Elasticsearch Query DSL … not just for wizards....

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Clinton Gormley @clintongormley

Elasticsearch Query DSL … not just for wizards

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

elasticsearch.org/guide

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

elasticsearch

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

elasticsearch• real-time

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

elasticsearch• real-time • distributed

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

elasticsearch• real-time • distributed • search

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

elasticsearch• real-time • distributed • search • analytics

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

mapping

analysis query dsl

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

mapping

analysis query dsl

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

query dsl

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

query dslflexible, powerful query language

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

queries• relevance • full text • not cached • slower

filters• boolean yes/no • exact values • cached • faster

Filter first, then query remaining docs

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {...}  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {  "match":  {  "title":  "search"  }}  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {  match_all:  {}}  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {  match_all:  {}}  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {              "query":    {...},              "filter":  {...}          }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {              "query":    {  "match":  {  "title":    "search"  }},              "filter":  {...}          }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {              "query":    {  "match":  {  "title":    "search"  }},              "filter":  {  "term":    {  "status":  "active"  }}          }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {              "query":    {  "match_all":  {}},              "filter":  {  "term":    {  "status":  "active"  }}          }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {              "query":    {  "match_all":  {}},              "filter":  {  "term":    {  "status":  "active"  }}          }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

how data is indexed

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }  !{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                              regular  basis"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }  !{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                              regular  basis"  }

where content like “%brown%fox%”

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }  !{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                              regular  basis"  }

slow & inflexible

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }  !{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                              regular  basis"  }

“analysis”

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }  !{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                              regular  basis"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      [quick,brown,rabbits],      "content":  [brown,rabbits,are,commonly,seen]  }  !{      "title":      [keeping,pets,healthy],      "content":  [my,quick,brown,fox,eats,rabbits,on,a,                              regular,basis]  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term Doc  1 Doc  2aarebasisbrowncommonlyeatsfoxmyonquickrabbitsregularseen

field: content

sorted list of unique terms

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term Doc  1 Doc  2aarebasisbrowncommonlyeatsfoxmyonquickrabbitsregularseen

field: content

where they occur

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term Doc  1 Doc  2aarebasisbrowncommonlyeatsfoxmyonquickrabbitsregularseen

field: content

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term Doc  1 Doc  2aarebasisbrowncommonlyeatsfoxmyonquickrabbitsregularseen

field: content

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

inverted index

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

inverted indexnot just for text

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

inverted indexnumbers, dates, bools, enums

geopoints, geoshapes, etc

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  =  "value"

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  CONTAINS  "value"

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  CONTAINS  "value"

term filter

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

   "term":    {              "title":  "brown"        }

WHERE  field  CONTAINS  "value"

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {  !!!!    }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {  !!        }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {              "query":    {                            ...                          },              "filter":  {                            ...                          }          }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {              "query":    {  "match_all":  {}                            },              "filter":  {                            ...                          }          }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {              "query":    {  "match_all":  {}                            },              "filter":  {                            ...                          }          }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{      "query":  {          "filtered":  {              "query":    {  "match_all":  {}                            },              "filter":  {  "term":    {  "title":  "brown"  }}          }      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term Doc  1 Doc  2brownhealthykeepingpetsquickrabbits

field: title

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term Doc  1 Doc  2brownhealthykeepingpetsquickrabbits

field: title

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

   "term":  {  "title":  "brown"  }

➔  result:      bitset[  1,  0  ]

➔  cache  as:  "title:brown"

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  IN  ["val",…]

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  IN  ["val",…]

terms filter

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

   "terms":    {              "title":  ["quick",  "pets"]        }

WHERE  field  IN  ["val",…]

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term Doc  1 Doc  2brownhealthykeepingpetsquickrabbits

field: title

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

   "terms":  {  "title":  ["quick","pets"]  }

➔  result:      bitset[  1,  1  ]

➔  cache  as:  "title:quick  title:pets"

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  >=  "val1"      AND  field  <    "val2"

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  >=  "val1"      AND  field  <    "val2"

range filter

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

   "range":    {              "content":{                "gte":  "a",                "lt":    "m"            }      }

WHERE  field  >=  "val1"      AND  field  <    "val2"

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term Doc  1 Doc  2aarebasisbrowncommonlyeatsfoxmyonquickrabbitsregularseen

field: content

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

➔  result:      bitset[  1,  1  ]

➔  cache  as:  "content:[a  TO  m}"

   "range":    {              "content":{  "gte":  "a",  "lt":    "m"  }      }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

 "range":    {              "date":{                  "gte":  "2014-­‐01-­‐01",                "lt":    "2041-­‐02-­‐01"            }      }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

 "range":    {              "date":{                  "gte":  "2014-­‐01-­‐01",                "lt":    "2041-­‐02-­‐01"            }      }

numeric/date fields optimised

for range filters

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

 "range":    {              "date":{                  "gte":  "now  -­‐  1h"            }      }

not cached

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

 "range":    {              "date":{                  "gte":  "now  -­‐  1h  /  h"            }      }

cached

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  IS  NOT  NULL

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  has  any  term

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

WHERE  field  has  any  term

exists filter

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"exists":    {        "field":  "title"  }  

WHERE  field  has  any  term

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

missing filter

WHERE  field  has  no  term

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"missing":    {        "field":  "title"  }  

WHERE  field  has  no  term

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

AND  …  OR  …  NOT

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

AND  …  OR  …  NOT

bool filter

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":          [  <filters>  ],      "should":      [  <filters>  ],      "must_not":  [  <filters>  ]  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":          [  <filters>  ],  #  AND      "should":      [  <filters>  ],      "must_not":  [  <filters>  ]  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":          [  <filters>  ],      "should":      [  <filters>  ],  #  OR      "must_not":  [  <filters>  ]  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":          [  <filters>  ],      "should":      [  <filters>  ],      "must_not":  [  <filters>  ]    #  NOT  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":  {  "term":  {  "title":  "rabbits"  }},  !!!!!}  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":  {  "term":  {  "title":  "rabbits"  }},      "should":  [            {  "term":  {  "title":      "quick"  }},          {  "term":  {  "content":  "quick"  }}      ],  !}  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":  {  "term":  {  "title":  "rabbits"  }},      "should":  [            {  "term":  {  "title":      "quick"  }},          {  "term":  {  "content":  "quick"  }}      ],      "must_not":  {  "term":  {  "content":  "fox"  }}  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":  [          {  "bool":    {                "should":  [                    {  "term":  {  "title":      "rabbits"  }},                  {  "term":  {  "content":  "rabbits"  }}          ]}},          {  "bool":    {                "should":  [                    {  "term":  {  "title":      "quick"  }},                  {  "term":  {  "content":  "quick"  }}          ]}}      ],      "must_not":  {  "term":  {  "content":  "fox"  }}  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":  [          {  "bool":    {                "should":  [                    {  "term":  {  "title":      "rabbits"  }},                  {  "term":  {  "content":  "rabbits"  }}          ]}},          {  "bool":    {                "should":  [                    {  "term":  {  "title":      "quick"  }},                  {  "term":  {  "content":  "quick"  }}          ]}}      ],      "must_not":  {  "term":  {  "content":  "fox"  }}  }

not cached

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":  [          {  "bool":    {                "should":  [                    {  "term":  {  "title":      "rabbits"  }},                  {  "term":  {  "content":  "rabbits"  }}          ]}},          {  "bool":    {                "should":  [                    {  "term":  {  "title":      "quick"  }},                  {  "term":  {  "content":  "quick"  }}          ]}}      ],      "must_not":  {  "term":  {  "content":  "fox"  }}  }

cached

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

result  bitset  =              !          (title:rabbits  OR  content:rabbits)      AND            (title:quick      OR  content:quick)      AND            NOT  content:fox        

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

filters• boolean yes/no • exact values • cached • faster

Filter first, then query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

how relevant is this term?

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

how relevant is this term?term query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

≈ term filter + relevance

how relevant is this term?term query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

   "term":    {              "title":  "brown"        }

how relevant is this term?

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{        "query":  {  !!!      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

GET  /_search{        "query":  {              "term":  {                      "title":  "brown"                }        }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{          "_index":  "myindex",          "_type":    "mytype",          "_id":        "1",          "_score":  0.5,          "_source":  {                "title":      "Quick  brown  rabbits",                "content":  "Brown  rabbits  are  commonly  seen"          }  }  

how relevant is this doc?

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

relevance scoreHow common is the term in this doc? ➔ more is better

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

relevance scoreHow common is the term in this doc? ➔ more is better How common is the term in ALL docs? ➔ less is better

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

relevance scoreHow common is the term in this doc? ➔ more is better How common is the term in ALL docs? ➔ less is better How long is this doc? ➔ shorter is better

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

lucene similarityHow common is the term in this doc? ➔ more is better How common is the term in ALL docs? ➔ less is better How long is this doc? ➔ shorter is better

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

lucene similarityHow common is the term in this doc? ➔ more is better How common is the term in ALL docs? ➔ less is better How long is this doc? ➔ shorter is better

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term frequency !

How common is the term in ALL docs? ➔ less is better How long is this doc? ➔ shorter is better

lucene similarity

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term frequency !

How common is the term in ALL docs? ➔ less is better How long is this doc? ➔ shorter is better

lucene similarity

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term frequency !

Inverse document frequency !

How long is this doc? ➔ shorter is better

lucene similarity

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term frequency !

Inverse document frequency !

How long is this doc? ➔ shorter is better

lucene similarity

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Term frequency !

Inverse document frequency !

Length norm

lucene similarity

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

AND  …  OR  …  NOT

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

AND  …  OR  …  NOT

bool query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

like bool filter, but different...

AND  …  OR  …  NOT

bool query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":          [  <queries>  ],  #  AND      "should":      [  <queries>  ],      "must_not":  [  <queries>  ]    #  NOT  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":          [  <queries>  ],  #  AND      "should":      [  <queries>  ],  #  Hmmm      "must_not":  [  <queries>  ]    #  NOT  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {        "must":          [  <queries>  ],  #  AND      "should":      [  <queries>  ],  #  Hmmm      "must_not":  [  <queries>  ],  #  NOT      "minimum_should_match":  ?    #  Hmmm  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

no "must" queries

at least one must match

"bool":    {    "should":      [          {  "term":  {  "title":  "quick"  }},          {  "term":  {  "title":  "brown"  }},          {  "term":  {  "title":  "rabbits"  }}      ]  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

no "must" queries

minimum_should_match = 1

"bool":    {    "should":      [          {  "term":  {  "title":  "quick"  }},          {  "term":  {  "title":  "brown"  }},          {  "term":  {  "title":  "rabbits"  }}      ]  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {      "must":  {  "term":  {  "title":  "quick"}},        "should":      [          {  "term":  {  "title":  "brown"  }},          {  "term":  {  "title":  "rabbits"  }}      ]  }  

with "must" queries

all are optional!

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":    {      "must":  {  "term":  {  "title":  "quick"}},        "should":      [          {  "term":  {  "title":  "brown"  }},          {  "term":  {  "title":  "rabbits"  }}      ]  }  

with "must" queries

minimum_should_match = 0

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

bool  filter  ➔  T/F  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

bool  filter  ➔  T/F  !

bool  query    ➔  _score

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

_score  of  bool  query  =  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

_score  of  bool  query  =        sum(  _score  of  each  query)  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

_score  of  bool  query  =        sum(  _score  of  each  query)        *  num  of  matching  queries  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

_score  of  bool  query  =        sum(  _score  of  each  query)        *  num  of  matching  queries        /  num  of  queries  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

more matching should queries

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

more matching should queries ==

better relevance score

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

trim the long tail"bool":    {    "should":      [          {  "term":  {  "title":  "quick"  }},          {  "term":  {  "title":  "brown"  }},          {  "term":  {  "title":  "rabbits"  }}      ]  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

trim the long tail"bool":    {    "should":      [          {  "term":  {  "title":  "quick"  }},          {  "term":  {  "title":  "brown"  }},          {  "term":  {  "title":  "rabbits"  }}      ],      "minimum_should_match":  "75%"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

trim the long tail"bool":    {    "should":      [          {  "term":  {  "title":  "quick"  }},          {  "term":  {  "title":  "brown"  }},          {  "term":  {  "title":  "rabbits"  }}      ],      "minimum_should_match":  "75%"  #  2  of  3  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

match query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

match queryhigh level query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

match queryhigh level query

understands mapping & analysis

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

match query➔ analyze query string ➔ rewrite query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

one word query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{  "match":    {  "title":  "QUICK!"  }}

title:quick

{  "term":    {  "title":  "quick"  }}

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

multi word query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{  "match":    {  "title":  "QUICK  FOX!"  }}

title:quick  OR  title:fox

{  "bool":  {          "should":  [              {  "term":  {  "title":  "quick"  }},              {  "term":  {  "title":  "fox"      }}          ]  }}  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

all words must match

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "match":    {            "title":  "QUICK  FOX!"      }  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "match":    {            "title":  {              "query":        "QUICK  FOX!",  !        }      }  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "match":    {            "title":  {              "query":        "QUICK  FOX!",              "operator":  "and"          }      }  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "bool":  {          "should":  [              {  "term":  {  "title":  "quick"  }},              {  "term":  {  "title":  "fox"      }}          ]      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "bool":  {          "must":  [              {  "term":  {  "title":  "quick"  }},              {  "term":  {  "title":  "fox"      }}          ]      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

trim long tail

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "match":    {            "title":  {              "query":  "QUICK  BROWN  FOX!",              "minimum_should_match":  "75%"          }      }  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "bool":  {          "should":  [              {  "term":  {  "title":  "quick"  }},              {  "term":  {  "title":  "brown"  }},              {  "term":  {  "title":  "fox"      }}          ],          "minimum_should_match":  2      }  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

fuzzy querieslevenshtein edit distance

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

bron      ➔        brown

insertion

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

bron      ➔        brown

foxs      ➔        fox

deletion

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

bron      ➔        brown

foxs      ➔        fox

kiuck      ➔      qiuck

substitution

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

bron      ➔        brown

foxs      ➔        fox

kiuck      ➔      qiuck    ➔    quick

transposition

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "match":    {            "title":  {              "query":  "KIUCK  BRON  FOXS!",              "fuzziness":  "AUTO"          }  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

phrase / proximity

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "match_phrase":    {            "title":"QUICK  BROWN  FOX!"      }  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{        "match_phrase":    {            "title":  {              "query":  "BROWN  QUICK  FOX!",              "slop":    "10"          }      }  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

combine queries

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":  {      "must":  {  <min_should_match>  },      "should":  [                      {            <fuzzy>              },                      {          <proximity>        }      ]  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":  {      "must":  {  <min_should_match>  },      "should":  [                      {            <fuzzy>              },                      {          <proximity>        }      ]  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

!        "match":  {              "title":  {                  "query":  "<words>",                  "minimum_should_match":  "75%"              }          }  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":  {      "must":  {  <min_should_match>  },      "should":  [                      {            <fuzzy>              },                      {          <proximity>        }      ]  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

!      "match":  {            "title":  {                "query":  "<words>",                "fuzziness":  "AUTO"              }          }  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":  {      "must":  {  <min_should_match>  },      "should":  [                      {            <fuzzy>              },                      {          <proximity>        }      ]  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

!    "match_phrase":  {            "title":  {                "query":  "<words>",                "slop":  "10"            }        }  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":  {      "must":  {  <min_should_match>  },      "should":  [                      {            <fuzzy>              },                      {          <proximity>        }      ]  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

multi-field queries

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

easy!

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":  {      "should":  [          {  "match":  {"first":    "Reginald"  }},          {  "match":  {"middle":  "Kenneth"    }},          {  "match":  {"last":      "Dwight"      }}          ],          "minimum_should_match":  "75%"  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

hard!

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":  {      "should":  [          {  "match":  {                  "title":    "quick  brown  fox"            }},          {  "match":  {                  "content":  "quick  brown  fox"              }}      ]  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }

{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                                  regular  basis"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }

{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                                  regular  basis"  }

better match

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }

{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                                  regular  basis"  }

But 2 matches wins

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

all docs which match any query

dis_max query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

all docs which match any query

dis_max query

_score  =  best  matching  query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"bool":  {      "should":  [          {  "match":  {                  "title":    "quick  brown  fox"            }},          {  "match":  {                  "content":  "quick  brown  fox"              }}      ]  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"dis_max":  {      "queries":  [          {  "match":  {                  "title":    "quick  brown  fox"            }},          {  "match":  {                  "content":  "quick  brown  fox"              }}      ]  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }

{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                                  regular  basis"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "title":      "Quick  brown  rabbits",      "content":  "Brown  rabbits  are  commonly  seen"  }

{      "title":      "Keeping  pets  healthy",      "content":  "My  quick  brown  fox  eats  rabbits  on  a                                  regular  basis"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"dis_max":  {      "queries":  [          {  "match":  {                  "title":    "quick  brown  fox"            }},          {  "match":  {                  "content":  "quick  brown  fox"              }}      ],      "tie_breaker":  0.2  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

all docs which match any query

dis_max query

_score  =  best  matching  query    +  tie_breaker  *  others

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

multi_match query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

match query on multiple fields

multi_match query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"dis_max":  {      "queries":  [          {  "match":  {                  "title":    "quick  brown  fox"            }},          {  "match":  {                  "content":  "quick  brown  fox"              }}      ],      "tie_breaker":  0.2  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"multi_match":  {      "query":            "quick  brown  fox",      "fields":      [  "title",  "content"  ]      "tie_breaker":  0.2  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"multi_match":  {      "query":            "quick  brown  fox",      "fields":      [  "title",  "content"  ]      "tie_breaker":  0.2,  #  "type":              "best_fields"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

find whole "concept" in one field

best_fields

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"quick brown fox" in title or content

best_fields

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

best_fields

dis_max"quick brown fox" in title or content

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"title":  {      "type":                  "string"  }  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"title":  {      "type":                  "string",      "fields":  {  !!!!!!!}}

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"title":  {      "type":                  "string",      "fields":  {          "stemmed":  {              "type":          "string",              "analyzer":  "english"          }  !!!}}

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"title":  {      "type":                  "string",      "fields":  {          "stemmed":  {              "type":          "string",              "analyzer":  "english"          },          "autocomplete":  {              "type":          "string",              "analyzer":  "edge_ngrams"  }}}

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

title:      [  brown,  fox,  jumped  ]  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

title:      [  brown,  fox,  jumped  ]  !title.stemmed:      [  brown,  fox,  jump  ]  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

title:      [  brown,  fox,  jumped  ]  !title.stemmed:      [  brown,  fox,  jump  ]  !title.autocomplete      [  b,  br,  bro,  brow,  brown,            f,  fo,  fox,          j,  ju,  jum,  jump,  jumpe,  jumped      ]  

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"multi_match":  {      "query":            "quick  brown  fox",      "fields":      [                                    "title",                                    "title.stemmed",                                  "title.autocomplete"                              ]      "type":              "most_fields"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

most_fieldsmatch same text

analyzed in different ways

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

most_fieldsmore matching fields = better

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

most_fields

boolmore matching fields = better

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

{      "first":    "Reginald",      "middle":  "Kenneth"      "last":      "Dwight"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"multi_match":  {      "query":  "Reginald  Kenneth  Dwight",      "fields":      [                                    "first",                                    "middle",                                  "last"                              ]  !}

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"multi_match":  {      "query":  "Reginald  Kenneth  Dwight",      "fields":      [                                    "first",                                    "middle",                                  "last"                              ]      "type":              "????"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"multi_match":  {      "query":  "Reginald  Kenneth  Dwight",      "fields":      [                                    "first",                                    "middle",                                  "last"                              ]      "type":              "most_fields"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

problemfield centric

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

(          first:  Reginald        OR    first:  Kenneth        OR    first:  Dwight  )  OR  (              middle:Reginald        OR    middle:Kenneth        OR    middle:Dwight  )  OR  (              last:    Reginald        OR    last:    Kenneth        OR    last:    Dwight  )

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

(          first:  Reginald        OR    first:  Kenneth        OR    first:  Dwight  )  OR  (              middle:Reginald        OR    middle:Kenneth        OR    middle:Dwight  )  OR  (              last:    Reginald        OR    last:    Kenneth        OR    last:    Dwight  )

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

problemoperator: and

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

(          first:  Reginald        AND  first:  Kenneth        AND  first:  Dwight  )  OR  (              middle:Reginald        AND  middle:Kenneth        AND  middle:Dwight  )  OR  (              last:    Reginald        AND  last:    Kenneth        AND  last:    Dwight  )

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

(          first:  Reginald        AND  first:  Kenneth        AND  first:  Dwight  )  OR  (              middle:Reginald        AND  middle:Kenneth        AND  middle:Dwight  )  OR  (              last:    Reginald        AND  last:    Kenneth        AND  last:    Dwight  )

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

problemterm frequencies

first:dwight    ➔  common  last:  dwight    ➔  uncommon

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

solution

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

index time solutionsingle "fullname" field

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"first":  {            "type":  "string"  },  "middle":  {            "type":  "string"  },  "last":  {            "type":  "string"  }  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"first":  {            "type":  "string"  },  "middle":  {            "type":  "string"  },  "last":  {            "type":  "string"  },  "full":  {          "type":  "string"    }  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"first":  {            "type":  "string",  "copy_to":  "full"    },  "middle":  {            "type":  "string",  "copy_to":  "full"    },  "last":  {            "type":  "string",  "copy_to":  "full"    },  "full":  {          "type":  "string"    }  !

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"match":  {      "full":  "Reginald  Kenneth  Dwight",      "minimum_should_match":  "75%"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

query time solutionterm-centric query

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

(          first:  Reginald        AND  first:  Kenneth        AND  first:  Dwight  )  OR  (              middle:Reginald        AND  middle:Kenneth        AND  middle:Dwight  )  OR  (              last:    Reginald        AND  last:    Kenneth        AND  last:    Dwight  )

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

(          first:  Reginald        OR    middle:Reginald        OR    last:    Reginald    )  AND  (              first:  Kenneth        OR    middle:Kenneth        OR    last:    Kenneth    )  AND  (              first:  Dwight      OR    middle:Dwight      OR    last:    Dwight  )

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

       blend(first,middle,last):Reginald  AND  blend(first,middle,last):Kenneth  AND  blend(first,middle,last):Dwight

blends term frequencies

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

cross_fieldsquery multiple fields as if they were one

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"multi_match":  {      "query":  "Reginald  Kenneth  Dwight",      "fields":      [                                    "first",                                    "middle",                                  "last"                              ]      "type":              "cross_fields"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

"multi_match":  {      "query":  "Reginald  Kenneth  Dwight",      "fields":      [                                    "first",                                    "middle",                                  "last"                              ]      "type":              "cross_fields",      "minimum_should_match":  "75%"  }

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

best_fields: whole concept in single field

most_fields: same text, different analyzers

cross_fields: treat multiple fields as one

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

understand the building blocks

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

the rest is details

Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited.

thank you@clintongormley

elasticsearch.org/downloads

elasticsearch.com/support

elasticsearch.com/jobs