查詢(xún)與過(guò)濾條件的合并
查詢(xún)語(yǔ)句和過(guò)濾語(yǔ)句可以放在各自的上下文中辫继。 在 ElasticSearch API 中我們會(huì)看到許多帶有?query?或?filter?的語(yǔ)句俏竞。 這些語(yǔ)句既可以包含單條 query 語(yǔ)句离熏,也可以包含一條 filter 子句突想。 換句話(huà)說(shuō)欠啤,這些語(yǔ)句需要首先創(chuàng)建一個(gè)query或filter的上下文關(guān)系刀诬。
復(fù)合查詢(xún)語(yǔ)句可以加入其他查詢(xún)子句咽扇,復(fù)合過(guò)濾語(yǔ)句也可以加入其他過(guò)濾子句。 通常情況下陕壹,一條查詢(xún)語(yǔ)句需要過(guò)濾語(yǔ)句的輔助质欲,全文本搜索除外。
所以說(shuō)帐要,查詢(xún)語(yǔ)句可以包含過(guò)濾子句把敞,反之亦然。 以便于我們切換 query 或 filter 的上下文榨惠。這就要求我們?cè)谧x懂需求的同時(shí)構(gòu)造正確有效的語(yǔ)句奋早。
1.帶過(guò)濾的查詢(xún)語(yǔ)句
過(guò)濾一條查詢(xún)語(yǔ)句,比如說(shuō)我們有這樣一條查詢(xún)語(yǔ)句:
然后我們想要讓這條語(yǔ)句加入?term?過(guò)濾赠橙,在收信箱中匹配郵件:
search?API中只能包含?query?語(yǔ)句耽装,所以我們需要用?filtered?來(lái)同時(shí)包含 "query" 和 "filter" 子句,我們?cè)谕鈱釉偌尤?query?的上下文關(guān)系::
2.單條過(guò)濾語(yǔ)句
在?query?上下文中期揪,如果你只需要一條過(guò)濾語(yǔ)句掉奄,比如在匹配全部郵件的時(shí)候,你可以 省略?query?子句:
如果一條查詢(xún)語(yǔ)句沒(méi)有指定查詢(xún)范圍,那么它默認(rèn)使用?match_all?查詢(xún)姓建,所以上面語(yǔ)句 的完整形式如下:
3.過(guò)濾語(yǔ)句中的查詢(xún)
有時(shí)候诞仓,你需要在 filter 的上下文中使用一個(gè) query 子句。下面的語(yǔ)句就是一條帶有查詢(xún)功能 的過(guò)濾語(yǔ)句速兔, 這條語(yǔ)句可以過(guò)濾掉看起來(lái)像垃圾郵件的文檔:
<1> 過(guò)濾語(yǔ)句中可以使用query查詢(xún)的方式代替?bool?過(guò)濾子句墅拭。
注:我們很少用到的過(guò)濾語(yǔ)句中包含查詢(xún),保留這種用法只是為了語(yǔ)法的完整性涣狗。 只有在過(guò)濾中用到全文本匹配的時(shí)候才會(huì)使用這種結(jié)構(gòu)谍婉。