query_string , default_field指定搜索字段,在不指定字段的狀況下默認搜索 _all 字段,_all綜合了全部的內容,同時query 不僅是搜索一個關鍵詞他包含了Lucene中的語法,容許使用and or 或(-)號排除某文檔api
GET fanya_statistics/_search { "query": { "query_string": { "query": "國際經濟與貿易", "default_field": "zy" } } }
term查詢與term過濾,term查詢實際上是對應Lucene中TermQuery,是沒有通過詞條分析的精確匹配查詢jvm
GET fanya_statistics/_search { "query": { "term": {"mz.keyword": "藏族"} } }
terms查詢與term相似,terms指的是能夠匹配某文檔字段中的多個詞條,minimum_should_match 限制文檔必須匹配的詞條數量oop
GET fanya_statistics/_search { "query":{ "terms":{ "tags":["jvm", "hadoop"], "minimum_should_match":2 } } }
match查詢, 默認狀況下使用布爾行爲和OR操做符,如咱們要搜索文本「ElasticSearch Denver」時,實際上是搜索包含ElasticSearch或包含Denver的文檔,若是想變成搜索「ElasticSearch Denver」須要設置operator:and性能
GET fanya_statistics_fanyajw_zs/_search { "query":{ "match":{ "nj":{ "query":"ElasticSearch Denver", "operator":"and" } } } }
match查詢指定詞條間隔,假如咱們只記得名稱中的兩個詞還不是挨着的,此時可使用match查詢的詞組查詢行爲,指定type:phrase 和 slop詞條之間的間距(容許詞條之間有間隔數值類型)測試
GET fanya_statistics_fanyajw_zs/_search { "query":{ "match":{ "nj":{ "type": "phrase", "slop":1, "query":"ElasticSearch Denver" } } } }
在6.x已經不支持在math裏面使用type,改成match_phraseui
GET fanya_statistics_fanyajw_zs/_search { "query":{ "match_phrase":{ "nj":{ "slop":1, "query":"ElasticSearch Denver" } } } }
match查詢,前綴匹配phrase_prefix類型code
GET fanya_statistics_fanyajw_zs/_search { "query":{ "match":{ "nj":{ "type": "phrase_prefix", "Max_expansions":1, "query":"ElasticSearch Denver" } } } }
在6.x後的寫法hadoop
GET fanya_statistics_fanyajw_zs/_search { "query":{ "match_phrase_prefix":{ "uuid":{ "query":"ElasticSearch", "max_expansions": 10 } } } }
multi_match查詢,與terms比較相似terms是在一個字段中匹配多個詞,multi_match是指定搜索詞條在多個字段中匹配文檔
GET fanya_statistics_fanyajw_zs/_search { "query":{ "multi_match":{ "query":"2019", "fields": ["nj","cc"] } } }
bool查詢是指組合查詢或複合查詢,如咱們查詢指定學校必須包含2019級數據,同時應該包含2018級數據(沒有也無所謂),層次不能包含專升本的string
must 返回結果必須有的數據,只有匹配上才能返回數據,相似於AND,query1 AND query2
should 返回結果應該有的數據,若是沒有找到就不返回,相似於OR,query1 OR query2
must_not 返回結果中不該該存在的數據,相似於NOT,query1 AND NOT query2
假如must域should同時存在,若是must條件不知足的話,即便知足should條件,也不會返回數據由於不知足must條件
GET /fanya_statistics_fanyajw_zs/_search { "query": { "bool": { "must": [ {"term": { "type": 1 }}, {"term": { "sflq": 1 }}, {"term": { "schoolId": 23398 }}, {"term": { "nj": "2019級" }} ], "should": [ {"term": { "type": 1 }}, {"term": { "sflq": 1 }}, {"term": { "schoolId": 23398 }}, {"term": { "nj": "2018級" }} ], "must_not": [ {"term": { "cc": "專升本"}} ] } } }
range查詢,範圍查詢,如查詢添加時間9-18~10-18之間的數據
gt大於,gte大於等於
lt小於,lte小於等於
GET /fanya_statistics_fanyajw_zs/_search { "query": { "range": { "tjsj": { "gte": 1537200000000, // 2018/9/18 0:0:0 "lte": 1539792000000 // 2018/10/18 0:0:0 } } } }
prefix查詢,前綴搜索
GET fanya_statistics_fanyajw_zs/_search { "query":{ "prefix": {"nj": "2019" } } }
wildcard查詢,通配符查詢,須要注意的是通配符查詢的性能問題,須要仔細測試
*能夠表明任意數量的任意字符
?表明一個任意字符
GET fanya_statistics_fanyajw_zs/_search { "query": { "wildcard": {"hsz": "北京*大學*"} } }
exists過濾器,須要注意的是高版本es filter的寫法改成在bool中指定filter了,並移除了missing的api,能夠在 bool must not 中指定exists表明不存在
GET fanya_statistics_fanyajw_zs/_search { "query": { "bool": { "must": [ {"match_all": {}} ], "filter": { "exists": { "field": "nj" } } } } }