這一個章節節我們要來介紹複合查詢,當單一的查詢子句無法完成需求時,為了應付這種高級查詢需求,所以就產生這種能夠把多個查詢子句組合起來的語法,就稱為複合查詢。
複合查詢就是指可以對多個查詢子句進行結合查詢資料,並且計算資料相關得分。bool query
就是將這些結果和得分整理後並回傳。
bool query用bool操作,包含的子句類型如下:
must
- 算分
- 回傳結果必需滿足所有符合的子句條件
- 類似SQL中的AND
filter
- 不算分
- 回傳結果必需滿足所有符合的子句條件
- 用法和must相似
should
- 算分
- 滿足這些條件中的任何條件都會增加評分_score,不滿足也不影響回傳結果
如果語法中有
must
語句,則should
語句就沒有匹配的要求。
如果語法中沒有must
語句,最少需要匹配一條should
語句。
must_not
- 不算分
- 回傳結果必需不滿足must_not條件
- 類似SQL中的NOT
範例一:
{
"bool": {
"must": {
"match": {
"title": "elasticsearch"
}
},
"should": [
{
"match": {
"tag": "13th"
}
},
{
"range": {
"date": {
"gte": "2014-01-01"
}
}
}
]
}
}
title
欄位符合elasticsearch
的所有資料tag
欄位有再符合13th
的資料,分數權重會在增加date
欄位有大於等於2014-01-01
的資料,分數權重會在增加
範例二:
{
"bool": {
"must": {
"match": {
"title": "elasticsearch"
}
},
"should": [
{
"match": {
"tag": "13th"
}
}
],
"filter": {
"range": {
"date": {
"gte": "2014-01-01"
}
}
}
}
}
range查詢己經從
should
語句轉移到filter
語句,表示已轉換成不評分的查詢,將不會再響相關分數計算。