elasticsearch⑤基本用法-高階查詢
- 子條件查詢:特定欄位所指特定值
- 複合條件查詢:以一定的邏輯組合子條件查詢
子條件查詢:
- query context
在查詢過程中,除了判斷文件是否滿足查詢條件外,ES還會計算一個_score來標識匹配程度 全文字查詢:針對文字型別資料
①模糊匹配match關鍵字match會匹配到elasticsearch或者入門相關的詞
{
“query”:{
“match”:{
“title”:”elasticsearch入門”
}
}
}②短語匹配
關鍵字match_phrase,被匹配的詞中必須有“elasticsearch入門”,並且詞語結構和順序都要一樣,比如”elasticsearch快速入門”是無法匹配的
{
“query”:{
“match_phrase”:{
“title”:”elasticsearch入門”
}
}
}③多個欄位匹配查詢
關鍵字multi_match.query後跟的是查詢條件,fields後面是需要查詢的欄位(此處用中括號“]”)
{
“query”:{
“multi_match”:{
“query”:”悟空”,
“fields”:[“author”,”title”]
}
}
}④語法查詢
關鍵字query_string, 可以在條線中用“OR” ,”AND” (注意大寫)
{
“query”:{
“query_string”:{
“query”:”悟空 OR 李四”,
“fields”:[“author”,”title”]
}
}
}欄位級別查詢:針對結構化資料,入數字,日期等
①普通查詢關鍵字term,
{
“query”:{
“term”:{
“word_count”:5000
}
}
}②範圍查詢,可以用於數字和時間(時間可以用“now”表示現在)
gte大於等於,lte小於等於。(e=equals表示等於),
{
“query”:{
“range”:{
“word_count”:{
“gte”:100,
“lte”:5000
}
}
}
}filter context
在查詢過程中,只判斷該文件是否滿足條件。只有yes或者nofilter是elasticsearch用來做資料過濾的,而且對資料進行快取,需要結合bool使用
{
“query”:{
“bool”:{
“filter”:{
“term”:{
“word_count”:500
}
}
}
}
}複合條件查詢
固定分數查詢:關鍵字constant_score
固定分數查詢只支援filter用來過濾資料,boots用來指定匹配度(匹配分數)。我用的6的版本,如果不知道的話查詢的資料都是1
{
“query”:{
“constant_score”:{
“filter”:{
“match”:{
“title”:”elasticsearch人門”
}
},
“boost”:0.6931472
}
}
}布林查詢
①,should表示應當,內部的match是“或”的關係{
“query”:{
“bool”:{
“should”:[
{
“match”:{
“author”:”李四”
}
},
{
“match”:{
“title”:”elasticsearch”
}
}
]
}
}
}②,must表示必須,內部的match是“與”的關係.
{
“query”:{
“bool”:{
“must”:[
{
“match”:{
“author”:”李四”
}
},
{
“match”:{
“title”:”elasticsearch”
}
}
]
}
}
}③ must_not 相當於“非”,必須不是條件中的資料
{
“query”:{
“bool”:{
“must_not”:[
{
“match”:{
“author”:”李四”
}
},
{
“match”:{
“title”:”elasticsearch”
}
}
]
}
}
}
群號:790579479,只限交流,歡迎大神前來指點