Elasticsearch Query DSL - Not just for wizards...

256
Copyright Elasticsearch 2014. Copying, publishing and/or distributing without written permission is strictly prohibited. Clinton Gormley @clintongormley Elasticsearch Query DSL … not just for wizards

description

The Elasticsearch Query DSL is a rich, flexible, powerful query language for full text and structured search, but with power comes complexity. Which of the 40 available queries should you use? What's a filter and when should you use it? How do you combine multiple filters, or multiple queries or queries with filters? To most users, "relevance", and how it is affected by different queries, is a black box. Multi-field queries in particular can be difficult to get right if you don't understand how they work. In this talk, I will explain the Query DSL from the ground up: how filters and queries use the inverted index to find matching documents, how the relevance score is calculated, how to combine the filter/query building blocks into complex statements. And finally, I will talk about the pitfalls of multi-field queries and how to avoid them.

Transcript of Elasticsearch Query DSL - Not just for wizards...

Page 1: 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

Page 2: Elasticsearch Query DSL - Not just for wizards...

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

Page 3: Elasticsearch Query DSL - Not just for wizards...

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

elasticsearch.org/guide

Page 4: Elasticsearch Query DSL - Not just for wizards...

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

elasticsearch

Page 5: Elasticsearch Query DSL - Not just for wizards...

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

elasticsearch• real-time

Page 6: Elasticsearch Query DSL - Not just for wizards...

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

elasticsearch• real-time • distributed

Page 7: Elasticsearch Query DSL - Not just for wizards...

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

elasticsearch• real-time • distributed • search

Page 8: Elasticsearch Query DSL - Not just for wizards...

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

elasticsearch• real-time • distributed • search • analytics

Page 9: Elasticsearch Query DSL - Not just for wizards...

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

mapping

Page 10: Elasticsearch Query DSL - Not just for wizards...

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

mapping

analysis

Page 11: Elasticsearch Query DSL - Not just for wizards...

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

mapping

analysis query dsl

Page 12: Elasticsearch Query DSL - Not just for wizards...

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

mapping

analysis query dsl

Page 13: Elasticsearch Query DSL - Not just for wizards...

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

query dsl

Page 14: Elasticsearch Query DSL - Not just for wizards...

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

query dslflexible, powerful query language

Page 15: Elasticsearch Query DSL - Not just for wizards...

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

queries

Page 16: Elasticsearch Query DSL - Not just for wizards...

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

queries filters

Page 17: Elasticsearch Query DSL - Not just for wizards...

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

queries• relevance

filters• boolean yes/no

Page 18: Elasticsearch Query DSL - Not just for wizards...

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

queries• relevance• full text

filters• boolean yes/no• exact values

Page 19: Elasticsearch Query DSL - Not just for wizards...

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

queries• relevance• full text• not cached

filters• boolean yes/no• exact values• cached

Page 20: Elasticsearch Query DSL - Not just for wizards...

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

Page 21: Elasticsearch Query DSL - Not just for wizards...

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

Page 22: Elasticsearch Query DSL - Not just for wizards...

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

GET  /_search

Page 23: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 24: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 25: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 26: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 27: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 28: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 29: Elasticsearch Query DSL - Not just for wizards...

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"  }}          }      }  }  

Page 30: Elasticsearch Query DSL - Not just for wizards...

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"  }}          }      }  }  

Page 31: Elasticsearch Query DSL - Not just for wizards...

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"  }}          }      }  }  

Page 32: Elasticsearch Query DSL - Not just for wizards...

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

how data is indexed

Page 33: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 34: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 35: Elasticsearch Query DSL - Not just for wizards...

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%”

Page 36: Elasticsearch Query DSL - Not just for wizards...

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

Page 37: Elasticsearch Query DSL - Not just for wizards...

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”

Page 38: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 39: Elasticsearch Query DSL - Not just for wizards...

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]  }

Page 40: Elasticsearch Query DSL - Not just for wizards...

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

Page 41: Elasticsearch Query DSL - Not just for wizards...

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

Term Doc  1 Doc  2aarebasisbrowncommonlyeatsfoxmyonquickrabbitsregularseen

field: content

where they occur

Page 42: Elasticsearch Query DSL - Not just for wizards...

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

Term Doc  1 Doc  2aarebasisbrowncommonlyeatsfoxmyonquickrabbitsregularseen

field: content

Page 43: Elasticsearch Query DSL - Not just for wizards...

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

Term Doc  1 Doc  2aarebasisbrowncommonlyeatsfoxmyonquickrabbitsregularseen

field: content

Page 44: Elasticsearch Query DSL - Not just for wizards...

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

inverted index

Page 45: Elasticsearch Query DSL - Not just for wizards...

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

inverted indexnot just for text

Page 46: Elasticsearch Query DSL - Not just for wizards...

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

inverted indexnumbers, dates, bools, enums

geopoints, geoshapes, etc

Page 47: Elasticsearch Query DSL - Not just for wizards...

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

WHERE  field  =  "value"

Page 48: Elasticsearch Query DSL - Not just for wizards...

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

WHERE  field  CONTAINS  "value"

Page 49: Elasticsearch Query DSL - Not just for wizards...

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

WHERE  field  CONTAINS  "value"

term filter

Page 50: Elasticsearch Query DSL - Not just for wizards...

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

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

WHERE  field  CONTAINS  "value"

Page 51: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 52: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 53: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 54: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 55: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 56: Elasticsearch Query DSL - Not just for wizards...

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"  }}          }      }  }  

Page 57: Elasticsearch Query DSL - Not just for wizards...

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

Term Doc  1 Doc  2brownhealthykeepingpetsquickrabbits

field: title

Page 58: Elasticsearch Query DSL - Not just for wizards...

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

Term Doc  1 Doc  2brownhealthykeepingpetsquickrabbits

field: title

Page 59: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 60: Elasticsearch Query DSL - Not just for wizards...

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

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

➔  result:      bitset[  1,  0  ]

Page 61: Elasticsearch Query DSL - Not just for wizards...

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"

Page 62: Elasticsearch Query DSL - Not just for wizards...

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

WHERE  field  IN  ["val",…]

Page 63: Elasticsearch Query DSL - Not just for wizards...

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

WHERE  field  IN  ["val",…]

terms filter

Page 64: Elasticsearch Query DSL - Not just for wizards...

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

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

WHERE  field  IN  ["val",…]

Page 65: Elasticsearch Query DSL - Not just for wizards...

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

Term Doc  1 Doc  2brownhealthykeepingpetsquickrabbits

field: title

Page 66: Elasticsearch Query DSL - Not just for wizards...

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"

Page 67: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 68: Elasticsearch Query DSL - Not just for wizards...

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

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

range filter

Page 69: Elasticsearch Query DSL - Not just for wizards...

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"

Page 70: Elasticsearch Query DSL - Not just for wizards...

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

Term Doc  1 Doc  2aarebasisbrowncommonlyeatsfoxmyonquickrabbitsregularseen

field: content

Page 71: Elasticsearch Query DSL - Not just for wizards...

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"  }      }

Page 72: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 73: Elasticsearch Query DSL - Not just for wizards...

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

Page 74: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 75: Elasticsearch Query DSL - Not just for wizards...

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

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

not cached

Page 76: Elasticsearch Query DSL - Not just for wizards...

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

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

cached

Page 77: Elasticsearch Query DSL - Not just for wizards...

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

WHERE  field  IS  NOT  NULL

Page 78: Elasticsearch Query DSL - Not just for wizards...

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

WHERE  field  has  any  term

Page 79: Elasticsearch Query DSL - Not just for wizards...

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

WHERE  field  has  any  term

exists filter

Page 80: Elasticsearch Query DSL - Not just for wizards...

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

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

WHERE  field  has  any  term

Page 81: Elasticsearch Query DSL - Not just for wizards...

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

missing filter

WHERE  field  has  no  term

Page 82: Elasticsearch Query DSL - Not just for wizards...

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

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

WHERE  field  has  no  term

Page 83: Elasticsearch Query DSL - Not just for wizards...

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

AND  …  OR  …  NOT

Page 84: Elasticsearch Query DSL - Not just for wizards...

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

AND  …  OR  …  NOT

bool filter

Page 85: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 86: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 87: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 88: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 89: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 90: Elasticsearch Query DSL - Not just for wizards...

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"  }}      ],  !}  

Page 91: Elasticsearch Query DSL - Not just for wizards...

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"  }}  }  

Page 92: Elasticsearch Query DSL - Not just for wizards...

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"  }}  }

Page 93: Elasticsearch Query DSL - Not just for wizards...

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

Page 94: Elasticsearch Query DSL - Not just for wizards...

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

Page 95: Elasticsearch Query DSL - Not just for wizards...

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        

Page 96: Elasticsearch Query DSL - Not just for wizards...

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

Page 97: Elasticsearch Query DSL - Not just for wizards...

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

how relevant is this term?

Page 98: Elasticsearch Query DSL - Not just for wizards...

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

how relevant is this term?term query

Page 99: Elasticsearch Query DSL - Not just for wizards...

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

≈ term filter + relevance

how relevant is this term?term query

Page 100: Elasticsearch Query DSL - Not just for wizards...

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

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

how relevant is this term?

Page 101: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 102: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 103: Elasticsearch Query DSL - Not just for wizards...

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?

Page 104: Elasticsearch Query DSL - Not just for wizards...

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

relevance score

Page 105: Elasticsearch Query DSL - Not just for wizards...

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

Page 106: Elasticsearch Query DSL - Not just for wizards...

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

Page 107: Elasticsearch Query DSL - Not just for wizards...

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

Page 108: Elasticsearch Query DSL - Not just for wizards...

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

Page 109: Elasticsearch Query DSL - Not just for wizards...

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

Page 110: Elasticsearch Query DSL - Not just for wizards...

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

Page 111: Elasticsearch Query DSL - Not just for wizards...

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

Page 112: Elasticsearch Query DSL - Not just for wizards...

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

Page 113: Elasticsearch Query DSL - Not just for wizards...

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

Page 114: Elasticsearch Query DSL - Not just for wizards...

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

Term frequency !

Inverse document frequency !

Length norm

lucene similarity

Page 115: Elasticsearch Query DSL - Not just for wizards...

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

AND  …  OR  …  NOT

Page 116: Elasticsearch Query DSL - Not just for wizards...

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

AND  …  OR  …  NOT

bool query

Page 117: Elasticsearch Query DSL - Not just for wizards...

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

like bool filter, but different...

AND  …  OR  …  NOT

bool query

Page 118: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 119: Elasticsearch Query DSL - Not just for wizards...

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  }  

Page 120: Elasticsearch Query DSL - Not just for wizards...

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  }  

Page 121: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 122: Elasticsearch Query DSL - Not just for wizards...

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"  }}      ]  }

Page 123: Elasticsearch Query DSL - Not just for wizards...

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"  }}      ]  }

Page 124: Elasticsearch Query DSL - Not just for wizards...

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

Page 125: Elasticsearch Query DSL - Not just for wizards...

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!

Page 126: Elasticsearch Query DSL - Not just for wizards...

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

Page 127: Elasticsearch Query DSL - Not just for wizards...

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

bool  filter  ➔  T/F  !

Page 128: Elasticsearch Query DSL - Not just for wizards...

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

bool  filter  ➔  T/F  !

bool  query    ➔  _score

Page 129: Elasticsearch Query DSL - Not just for wizards...

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

_score  of  bool  query  =  

Page 130: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 131: Elasticsearch Query DSL - Not just for wizards...

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  

Page 132: Elasticsearch Query DSL - Not just for wizards...

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  

Page 133: Elasticsearch Query DSL - Not just for wizards...

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

more matching should queries

Page 134: Elasticsearch Query DSL - Not just for wizards...

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

more matching should queries ==

better relevance score

Page 135: Elasticsearch Query DSL - Not just for wizards...

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"  }}      ]  }

Page 136: Elasticsearch Query DSL - Not just for wizards...

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%"  }

Page 137: Elasticsearch Query DSL - Not just for wizards...

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  }

Page 138: Elasticsearch Query DSL - Not just for wizards...

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

match query

Page 139: Elasticsearch Query DSL - Not just for wizards...

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

match queryhigh level query

Page 140: Elasticsearch Query DSL - Not just for wizards...

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

match queryhigh level query

understands mapping & analysis

Page 141: Elasticsearch Query DSL - Not just for wizards...

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

match query➔ analyze query string ➔ rewrite query

Page 142: Elasticsearch Query DSL - Not just for wizards...

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

one word query

Page 143: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 144: Elasticsearch Query DSL - Not just for wizards...

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

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

title:quick

Page 145: Elasticsearch Query DSL - Not just for wizards...

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

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

title:quick

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

Page 146: Elasticsearch Query DSL - Not just for wizards...

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

multi word query

Page 147: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 148: Elasticsearch Query DSL - Not just for wizards...

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

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

title:quick  OR  title:fox

Page 149: Elasticsearch Query DSL - Not just for wizards...

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"      }}          ]  }}  

Page 150: Elasticsearch Query DSL - Not just for wizards...

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

all words must match

Page 151: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 152: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 153: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 154: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 155: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 156: Elasticsearch Query DSL - Not just for wizards...

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

trim long tail

Page 157: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 158: Elasticsearch Query DSL - Not just for wizards...

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      }  }  

Page 159: Elasticsearch Query DSL - Not just for wizards...

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

fuzzy queries

Page 160: Elasticsearch Query DSL - Not just for wizards...

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

fuzzy querieslevenshtein edit distance

Page 161: Elasticsearch Query DSL - Not just for wizards...

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

bron      ➔        brown

insertion

Page 162: Elasticsearch Query DSL - Not just for wizards...

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

bron      ➔        brown

foxs      ➔        fox

deletion

Page 163: Elasticsearch Query DSL - Not just for wizards...

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

bron      ➔        brown

foxs      ➔        fox

kiuck      ➔      qiuck

substitution

Page 164: Elasticsearch Query DSL - Not just for wizards...

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

bron      ➔        brown

foxs      ➔        fox

kiuck      ➔      qiuck    ➔    quick

transposition

Page 165: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 166: Elasticsearch Query DSL - Not just for wizards...

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

phrase / proximity

Page 167: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 168: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 169: Elasticsearch Query DSL - Not just for wizards...

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

combine queries

Page 170: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 171: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 172: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 173: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 174: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 175: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 176: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 177: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 178: Elasticsearch Query DSL - Not just for wizards...

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

multi-field queries

Page 179: Elasticsearch Query DSL - Not just for wizards...

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

Page 180: Elasticsearch Query DSL - Not just for wizards...

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

easy!

Page 181: Elasticsearch Query DSL - Not just for wizards...

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%"  }  

Page 182: Elasticsearch Query DSL - Not just for wizards...

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

Page 183: Elasticsearch Query DSL - Not just for wizards...

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

hard!

Page 184: Elasticsearch Query DSL - Not just for wizards...

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"              }}      ]  }

Page 185: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 186: Elasticsearch Query DSL - Not just for wizards...

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

Page 187: Elasticsearch Query DSL - Not just for wizards...

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

Page 188: Elasticsearch Query DSL - Not just for wizards...

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

dis_max query

Page 189: Elasticsearch Query DSL - Not just for wizards...

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

all docs which match any query

dis_max query

Page 190: Elasticsearch Query DSL - Not just for wizards...

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

Page 191: Elasticsearch Query DSL - Not just for wizards...

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"              }}      ]  }

Page 192: Elasticsearch Query DSL - Not just for wizards...

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"              }}      ]  }

Page 193: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 194: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 195: Elasticsearch Query DSL - Not just for wizards...

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  }

Page 196: Elasticsearch Query DSL - Not just for wizards...

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

Page 197: Elasticsearch Query DSL - Not just for wizards...

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

multi_match query

Page 198: Elasticsearch Query DSL - Not just for wizards...

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

match query on multiple fields

multi_match query

Page 199: Elasticsearch Query DSL - Not just for wizards...

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  }

Page 200: Elasticsearch Query DSL - Not just for wizards...

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  }

Page 201: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 202: Elasticsearch Query DSL - Not just for wizards...

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

best_fields

Page 203: Elasticsearch Query DSL - Not just for wizards...

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

find whole "concept" in one field

best_fields

Page 204: Elasticsearch Query DSL - Not just for wizards...

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

"quick brown fox" in title or content

best_fields

Page 205: Elasticsearch Query DSL - Not just for wizards...

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

Page 206: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 207: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 208: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 209: Elasticsearch Query DSL - Not just for wizards...

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"  }}}

Page 210: Elasticsearch Query DSL - Not just for wizards...

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

title:      [  brown,  fox,  jumped  ]  !

Page 211: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 212: Elasticsearch Query DSL - Not just for wizards...

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      ]  

Page 213: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 214: Elasticsearch Query DSL - Not just for wizards...

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

most_fields

Page 215: Elasticsearch Query DSL - Not just for wizards...

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

most_fieldsmatch same text

analyzed in different ways

Page 216: Elasticsearch Query DSL - Not just for wizards...

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

most_fieldsmore matching fields = better

Page 217: Elasticsearch Query DSL - Not just for wizards...

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

most_fields

boolmore matching fields = better

Page 218: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 219: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 220: Elasticsearch Query DSL - Not just for wizards...

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":              "????"  }

Page 221: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 222: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 223: Elasticsearch Query DSL - Not just for wizards...

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

problem

Page 224: Elasticsearch Query DSL - Not just for wizards...

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

problemfield centric

Page 225: Elasticsearch Query DSL - Not just for wizards...

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  )

Page 226: Elasticsearch Query DSL - Not just for wizards...

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  )

Page 227: Elasticsearch Query DSL - Not just for wizards...

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

problem

Page 228: Elasticsearch Query DSL - Not just for wizards...

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

problemoperator: and

Page 229: Elasticsearch Query DSL - Not just for wizards...

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  )

Page 230: Elasticsearch Query DSL - Not just for wizards...

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  )

Page 231: Elasticsearch Query DSL - Not just for wizards...

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

problem

Page 232: Elasticsearch Query DSL - Not just for wizards...

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

problemterm frequencies

Page 233: Elasticsearch Query DSL - Not just for wizards...

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

problemterm frequencies

first:dwight    ➔  common

Page 234: Elasticsearch Query DSL - Not just for wizards...

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

problemterm frequencies

first:dwight    ➔  commonlast:  dwight    ➔  uncommon

Page 235: Elasticsearch Query DSL - Not just for wizards...

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

solution

Page 236: Elasticsearch Query DSL - Not just for wizards...

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

index time solution

Page 237: Elasticsearch Query DSL - Not just for wizards...

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

index time solutionsingle "fullname" field

Page 238: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 239: Elasticsearch Query DSL - Not just for wizards...

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"    }  !

Page 240: Elasticsearch Query DSL - Not just for wizards...

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"    }  !

Page 241: Elasticsearch Query DSL - Not just for wizards...

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

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

Page 242: Elasticsearch Query DSL - Not just for wizards...

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

query time solution

Page 243: Elasticsearch Query DSL - Not just for wizards...

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

query time solutionterm-centric query

Page 244: Elasticsearch Query DSL - Not just for wizards...

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  )

Page 245: Elasticsearch Query DSL - Not just for wizards...

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  )

Page 246: Elasticsearch Query DSL - Not just for wizards...

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

Page 247: Elasticsearch Query DSL - Not just for wizards...

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

Page 248: Elasticsearch Query DSL - Not just for wizards...

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

cross_fields

Page 249: Elasticsearch Query DSL - Not just for wizards...

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

cross_fieldsquery multiple fields as if they were one

Page 250: Elasticsearch Query DSL - Not just for wizards...

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"  }

Page 251: Elasticsearch Query DSL - Not just for wizards...

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%"  }

Page 252: Elasticsearch Query DSL - Not just for wizards...

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

Page 253: Elasticsearch Query DSL - Not just for wizards...

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

understand the building blocks

Page 254: Elasticsearch Query DSL - Not just for wizards...

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

the rest is details

Page 255: Elasticsearch Query DSL - Not just for wizards...

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

thank you@clintongormley

Page 256: Elasticsearch Query DSL - Not just for wizards...

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