ES可以使用URI或DSL進(jìn)行查詢
URI
GET /megacorp/employee/_search?q=last_name:Smith
由于DSL可以提供更多功能汗唱,以及可視化更好迷雪,一般都使用DSL進(jìn)行查詢
一個(gè)典型的DSL查詢結(jié)構(gòu)
"query" :{
"match": {
"last_name": "Smith"
}
}
常用的查詢方法:
match_all:簡(jiǎn)單的匹配所有文檔层释,是默認(rèn)查詢方式
match:在執(zhí)行查詢前再愈,使用分析器去分析查詢字符串
multi_match:可以在多個(gè)字段上執(zhí)行相同的match查詢
match_phrase:短語查詢铛楣,不對(duì)查詢字符串進(jìn)行分析
range:查詢區(qū)間內(nèi)的數(shù)字或者時(shí)間
term:精確值查詢刀荒,常用于數(shù)字弱左、時(shí)間窄陡、布爾值
terms:與term一樣,允許指定多個(gè)值進(jìn)行匹配
exists:是否存在
missing:是否確實(shí)
組合查詢(多個(gè)查詢條件)
"query" :{
"bool": {
"must": { "match": { "tweet": "elasticsearch" }},
"must_not": { "match": { "name": "mary" }},
"should": { "match": { "tweet": "full text" }},
"filter": { "range": { "age" : { "gt" : 30 }} }
}
}
must:文檔必須匹配這些條件才能被包含進(jìn)來
must_not:文檔必須不包含這些條件才能包含進(jìn)來
should:若匹配這些條件拆火,可以增加_score跳夭,主要用于修正相關(guān)性得分
filter:必須匹配,但以過濾模式來進(jìn)行们镜,對(duì)評(píng)分沒有貢獻(xiàn)
查詢組件包含:過濾與查詢兩個(gè)模式币叹,并可以無限搭配
使用查詢時(shí),是一個(gè)評(píng)分查詢模狭,返回匹配率
當(dāng)使用過濾時(shí)颈抚,不進(jìn)行評(píng)分,返回YES OR NO
一般情況下嚼鹉,過濾比查詢性能更優(yōu)(查詢需要匹配外贩汉,還需要計(jì)算相關(guān)性);通常的規(guī)則是锚赤,使用查詢語句進(jìn)行全文搜索或者其他需要影響相關(guān)性得分的搜索匹舞,除此之外使用過濾
參考:https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/full-body-search.html