結構化搜尋(structured search) 是指有關探詢那些具有內在結構資料的過程
在結構化查詢中,我們得到的結果 總是非是即否,要麼存於集合之中,要麼存在集合之外。
結構化查詢不關心檔案的相關度或評分;它簡單的對文件包括或排除處理。
當進行精確值查詢時, 我們會使用過濾器(filters)。
term 查詢 數字
我們首先來看最為常用的 term 查詢, 可以用它處理數字(numbers)、布林值(booleans)、日期(dates)以及文字(text)。
post /my_store/products/_bulk}}
}}
sql:查詢具有某個**的所有產品
select document from products where price = 20
dsl:
get /my_store/products/_search
}}}get /my_store/products/_search
}}
通常當查詢乙個精確值的時候,我們不希望對查詢進行評分計算。只希望對文件進行包括或排除的計算,所以我們會使用 constant_score 查詢以非評分模式來執行 term 查詢並以一作為統一評分
get /my_store/products/_search
},"boost": 1.2
}}
}
term 查詢 文字
sql:
select product from products where productid = "xhdk-a-1293-#fj3"
dsl:
get /my_store/products/_search
},"boost": 1.2
}}}
但這裡有個小問題:我們無法獲得期望的結果。為什麼呢?問題不在 term 查詢,而在於索引資料的方式,
如果我們使用 analyze api (分析 api),我們可以看到這裡的 upc 碼被拆分成多個更小的 token.
get /my_store/_analyze
, , , ]
}
這裡有幾點需要注意:
所以當我們用 term 查詢查詢精確值 xhdk-a-1293-#fj3 的時候,找不到任何文件,因為它並不在我們的倒排索引中,正如前面呈現出的分析結果,索引裡有四個 token 。
為了避免這種問題,我們需要告訴 elasticsearch 該欄位具有精確值,要將其設定成 not_analyzed 無需分析的
delete /my_store
put /my_store}}
}}get /my_store/products/_search}}
}}
sql:
select product
from products
where (price = 20 or productid = "xhdk-a-1293-#fj3")
and (price != 30)
dsl:
get /my_store/products/_search
}, }
],"must_not" : }}
}}
Elasticsearch 快取深入詳解
elasticsearch 查詢的響應需要占用 cpu 記憶體資源,在複雜業務場景,會出現慢查詢,需要花費大量的時間。如何破局呢?增加集群硬體配置會有高昂硬體開銷。還有沒有其他方案呢?這時候會想到 快取。elasticsearch 有哪些快取,不同快取的應用場景是什麼呢?本文給出答案。以上問題都是實...
3 Elasticsearch深入搜尋 部分匹配
elasticsearch認證複習準備 部分匹配概念 指定查詢詞的一部分並找出所有包含這部分片段的詞。簡單來說就是我輸入elas直接能給我匹配到elasticsearch這個詞。使用場景 匹配郵編 產品序列號或其他 not analyzed 未分析值,這些值可以是以某個特定字首開始,也可以是與某種模...
3 Elasticsearch深入搜尋 多欄位搜尋
elasticsearch認證複習準備 多欄位搜尋概念 用相同或不同的字串查詢乙個或多個字段 多字串查詢 get search 注 兩條語句同時匹配的文件比只與一條語句匹配的文件得分要高 get search 注 should中前兩個語句權重佔到了4 5 最佳字段搜尋 get search 注 將任...