在查詢過程當中,除了判斷文檔是否知足查詢條件,ES還會計算一個_score來標識匹配的程度,旨在判斷目標文檔和查詢條件匹配的有多好。正則表達式
{ "query":{ "match":{ "tittle":"ElasticSearch學習" } } }
像上面這樣查詢,會將包含」ElasticSearch「和」學習「結果查出來json
將上面的」match「改成」match_phrase「,即緩存
{ "query":{ "match_phrase":{ "tittle":"ElasticSearch學習" } } }
這樣就會把」ElasticSearch學習「作全詞匹配,只有徹底包含」ElasticSearch學習「的結果纔會返回學習
{ "query":{ "multi_match":{ "query":"李六", "fields":["author","tittle"] } } }
使用」multi_match「,將要查詢的關鍵字寫在」query「子字段中,並列出所要查詢的域,如上是要查詢」author「和」tittle「字段中包含」李六「的結果spa
語法查詢是根據必定的語法規則進行的查詢,常常在kibana中用,作數據搜索用的,也支持通配符,範圍查詢,布爾查詢,正則表達式等,語法表達比較豐富。code
{ "query":{ "query_string":{ "query":"(李六 AND 哈哈) OR 西瓜書", "fields":["author","tittle"] } } }
上述查詢示例所要實現的是在域「author」 和「tittle」中,查找同時包含「李六」和「哈哈」,或者包含「西瓜書」的結果。文檔
{ "query":{ "term":{ "author":"李六" } } }
指定查詢「author」爲「李六」的結果string
{ "query":{ "range":{ "word_count":{ "gte":20000, "lte":30000 } } } }
"gte"表示「大於等於」,「lte」表示「小於等於」,這裏是查詢「word_count」字段大於等於20000,小於等於30000的結果。it
在查詢過程當中,只判斷該文檔是否知足條件,只有Yes或者No.ast
{ "query":{ "bool":{ "filter":{ "term":{ "word_count":20000 } } } } }
"filter"要結合「bool」來使用,上述語句查詢「word_count」字段爲20000的數據。「filter」就是用來作數據過濾的,並且ES會對它的結果進行緩存,因此相對「query」要快一些。
查詢出」tittle「中含有」es「的結果以後能夠發現每條結果的score是不一樣的,下面的語句把查出來的結果的score值固定爲了2
{ "query":{ "constant_score":{ "filter":{ "match":{ "tittle":"es" } }, "boost":2 } } }
下面的」should「至關於」或「,只要」author「中包含」李六「或者」tittle「中包含」es「的結果就會被返回
{ "query":{ "bool":{ "should":[ { "match":{ "author":"李六" } }, { "match":{ "tittle":"es" } } ] } } }
還有」must「和」must_not「,分別對用的」與「,和」非「,使用的時候只須要把」should「替換便可。除此以外,還能夠結合filter對查詢結果作過濾:
{ "query":{ "bool":{ "must":[ { "match":{ "author":"李六" } }, { "match":{ "tittle":"es" } } ], "filter":[ { "term":{ "publish_date":"1995-03-16" } } ] } } }
以上查詢結果要求」author「必須包含」李六「,」tittle「必須包含」es「,而且對結果進行過濾,只返回」publish_date「爲」1995-03-16「的結果