精確查找
term 查詢數(shù)字
term 可以用來處理數(shù)字, 布爾值, 日期, 及文本
如果不希望對(duì)查詢?cè)u(píng)分計(jì)算, 只希望對(duì)文檔包括或排除的計(jì)算, 可以使用 constant_score 查詢 以非評(píng)分模式來執(zhí)行 term 查詢
term 查詢文本
如果需要對(duì)文本字段進(jìn)行精確查找, 需要將該字段設(shè)置為 not_analyzed (無需分析的) , 不然 es 會(huì)對(duì)其進(jìn)行進(jìn)行分析, 分析之后精確匹配就獲取不到值了;
es 能夠緩存非評(píng)分查詢從而獲取更快的訪問,但是 它不會(huì)太聰明地緩存一些使用極少的東西, es 會(huì)為每個(gè)索引跟蹤保留查詢個(gè)歷史狀態(tài), 如果查詢留在最近的 256 次潮汛中被用到, 那么它就會(huì)被緩存到內(nèi)存中
非評(píng)分計(jì)算是首先執(zhí)行的
組合過濾器
如果查詢是多條件的查詢, 那么需要用到 bool 查詢, bool 查詢是個(gè) 復(fù)合過濾器, 它可以接受多個(gè)其他過濾器作為參數(shù), 并將這些過濾器結(jié)合成各種各樣的 布爾邏輯組合
布爾過濾器
一個(gè)bool 過濾器由三部分組成
must? 所有的語(yǔ)句都必須(must) 匹配, 與and 等價(jià)
must_not 所有的語(yǔ)句都 不能(must_not) 匹配, 與 not 等價(jià),
should 至少有一個(gè)語(yǔ)句要匹配, 與 or 等價(jià)
當(dāng)我們需要多個(gè)過濾器的時(shí)候, 只需要將他們置入 bool 過濾器的不同部分即可, 上面的三部分 都是可選的, 不是必選的, 可以有一個(gè), 也可以同時(shí)都存在
bool 過濾器 本身也是一個(gè)過濾器, 所以我們可以將 bool 過濾器置于其他bool 過濾器內(nèi)部
term 和? terms 是 包含的意思, 而不是相等
精確相等
如果期望得到完全相等的查找怎么辦? 最好的方式是 增加并索引另一個(gè)字段, 這個(gè)字段用以存儲(chǔ)該字段包含詞項(xiàng)的數(shù)量
范圍:
range 可以對(duì)范圍進(jìn)行查找