ES搜索(二)query查詢

ES可以使用URI或DSL進(jìn)行查詢

URI

GET /megacorp/employee/_search?q=last_name:Smith

由于DSL可以提供更多功能,以及可視化更好,一般都使用DSL進(jìn)行查詢

一個典型的DSL查詢結(jié)構(gòu)

"query" :{
    "match": {
        "last_name": "Smith"
    }
}

常用的查詢方法:
match_all:簡單的匹配所有文檔,是默認(rèn)查詢方式
match:在執(zhí)行查詢前,使用分析器去分析查詢字符串
multi_match:可以在多個字段上執(zhí)行相同的match查詢
match_phrase:短語查詢,不對查詢字符串進(jìn)行分析
range:查詢區(qū)間內(nèi)的數(shù)字或者時間
term:精確值查詢,常用于數(shù)字、時間、布爾值
terms:與term一樣,允許指定多個值進(jìn)行匹配
exists:是否存在
missing:是否確實

組合查詢(多個查詢條件)

"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)行,對評分沒有貢獻(xiàn)

查詢組件包含:過濾與查詢兩個模式,并可以無限搭配

使用查詢時,是一個評分查詢,返回匹配率
當(dāng)使用過濾時,不進(jìn)行評分,返回YES OR NO

一般情況下,過濾比查詢性能更優(yōu)(查詢需要匹配外,還需要計算相關(guān)性);通常的規(guī)則是,使用查詢語句進(jìn)行全文搜索或者其他需要影響相關(guān)性得分的搜索,除此之外使用過濾

參考:https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/full-body-search.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容