99久久国产露脸精品麻豆,欧美日韩精品小说,亚洲免费在线美女视频,国产三级中文字幕,91极品国产情侣高潮对白,国产亚洲一区二区三区不卡片,欧美jizz精品欧美性,久久国产精品久久国产片

Elasticsearch查詢語法(二)

袁志蒙 2268次瀏覽

摘要:本文介紹ES的query子句的語法,query子句主要用于編寫查詢條件,類似SQL中的where語句,匹配單個字段,通過match實現全文搜索,全文搜索后面在單獨介紹...

本文介紹ES的query子句的語法,query子句主要用于編寫查詢條件,類似SQL中的where語句。

一、匹配單個字段

通過 match 實現全文搜索,全文搜索后面在單獨介紹,這里指的是簡單的用法:

POST /{索引名}/_search
{
  "query": {
    "match": {
      "{FIELD}": "{TEXT}"
    }
  }
}

{FIELD} - 就是我們需要匹配的字段名

{TEXT} - 就是我們需要匹配的內容

如果 {FIELD} 字段的數據類型是text類型,搜索關鍵詞會進行分詞處理。

二、精確匹配單個字段

如果我們想要類似SQL語句中的等值匹配,不需要進行分詞處理,例如:訂單號、手機號、時間字段,不需要分值處理,只要精確匹配。通過 term 實現精確匹配語法:

POST /{索引名}/_search
{
  "query": {
    "term": {
      "{FIELD}": "{VALUE}"
    }
  }
}

{FIELD} - 就是我們需要匹配的字段名

{VALUE} - 就是我們需要匹配的內容,除了TEXT類型字段以外的任意類型。

類似SQL語句:

select * from table_name where title = "yzmcms"

三、通過terms實現SQL的IN語句

如果我們要實現SQL中的in語句,一個字段包含給定數組中的任意一個值就匹配:

POST /{索引名}/_search
{
  "query": {
    "terms": {
      "{FIELD}": [
        "{VALUE1}",
        "{VALUE2}"
      ]
    }
  }
}

{FIELD} - 就是我們需要匹配的字段名

{VALUE1}, {VALUE2} .... {VALUE N} - 就是我們需要匹配的內容,除了TEXT類型字段以外的任意類型。

類似SQL語句:

select * from table_name where {FIELD} in ({VALUE1},{VALUE2})

四、范圍查詢

通過 range 實現范圍查詢,類似SQL語句中的>, >=, <, <=表達式:

POST /{索引名}/_search
{
  "query": {
    "range": {
      "{FIELD}": {
        "gte": 10, 
        "lte": 20
      }
    }
  }
}

{FIELD} - 字段名

gte范圍參數 - 等價于 >=

gt范圍參數 - 等價于 >

lte范圍參數 - 等價于 <=

lt范圍參數 - 等價于 <

范圍參數可以只寫一個,例如:僅保留 "gte": 10, 則代表 FIELD字段 >= 10

類似SQL:

select * from table_name where id >= 10 and id <= 20

五、bool組合查詢

前面的例子都是設置單個字段的查詢條件,如果需要編寫類似SQL的Where語句,組合多個字段的查詢條件,可以使用bool語句。

在ES中bool查詢就是用來組合布爾查詢條件,布爾查詢條件,就是類似SQL中的and (且)、or (或),在SQL中,我們需要and和or,還有括號來組合查詢條件,在ES中使用bool查詢可用做到同樣的效果。

POST /{索引名}/_search
{
  "query": {
    "bool": { // bool查詢
      "must": [], // must條件,類似SQL中的and, 代表必須匹配條件
      "must_not": [], // must_not條件,跟must相反,必須不匹配條件
      "should": [] // should條件,類似SQL中or, 代表匹配其中一個條件
    }
  }
}

可以任意選擇must、must_not和should條件的參數都是一個數組,意味著他們都支持設置多個條件。

must條件

POST /{索引名}/_search
{
  "query": {
    "bool": {
      "must": [
         {匹配條件1},
         {匹配條件2},
         ...可以有N個匹配條件...
        ]
    }
  }
}

例子:

POST /order/_search
{
  "query": {
    "bool": {
      "must": [
          {
            "term": {
              "order_no":  "202201012356"
            }
          },
          {
            "term": {
              "shop_id":  123
            }
          }
        ]
    }
  }
}

等價SQL:

select * from order where order_no="202201012356" and shop_id=123

must_not條件

POST /{索引名}/_search
{
  "query": {
    "bool": {
      "must_not": [
         {匹配條件1},
         {匹配條件2},
         ...可以有N個匹配條件...
        ]
    }
  }
}

例子:

POST /order/_search
{
  "query": {
    "bool": {
      "must_not": [
          {
            "term": {
              "shop_id": 1
            }
          },
          {
            "term": {
              "shop_id":  2
            }
          }
        ]
    }
  }
}

等價SQL:

select * from order where shop_id != 1 and shop_id != 2

should條件

POST /{索引名}/_search
{
	"query": {
		"bool": {
			"should": [
				{匹配條件1},
				{匹配條件2},
				…可以有N個匹配條件…
			]
		}
	}
}

例子:

POST /order/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "order_no": "202201012355"
          }
        },
        {
          "match": {
            "order_no": "202201012356"
          }
        }
      ]
    }
  }
}

等價SQL:

select * from order where order_no="202201012355" or order_no="202201012356"

bool綜合例子:

POST /order/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "term": {
                  "order_no": "20220101789"
                }
              },
              {
                "range": {
                  "shop_id": {
                    "gte": 10,
                    "lte": 20
                  }
                }
              }
            ]
          }
        },
        {
          "terms": {
            "typeid": [
              1,
              2,
              3
            ]
          }
        }
      ]
    }
  }
}

等價SQL:

select * from order where (order_no='20220101789' and (shop_id>=10 and shop_id<=20)) or typeid in (1,2,3)


隨機內容

表情

共0條評論
  • 這篇文章還沒有收到評論,趕緊來搶沙發吧~