1. 程式人生 > 其它 >Es查詢

Es查詢

複合查詢

複合查詢就是把一些簡單查詢組合在一起實現更復雜的查詢需求,除此之外,複合查詢還可以控制另外一個查詢的行為。

bool query

bool 查詢可以把任意多個簡單查詢組合在一起,使用 must、should、must_not、filter 選項來表示簡單查詢之間的邏輯,每個選項都可以出現 0 次到多次,它們的含義如下:

  • must 文件必須匹配 must 選項下的查詢條件,相當於邏輯運算的 AND,且參與文件相關度的評分。
  • should 文件可以匹配 should 選項下的查詢條件也可以不匹配,相當於邏輯運算的 OR,且參與文件相關度的評分。
  • must_not 與 must 相反,匹配該選項下的查詢條件的文件不會被返回;需要注意的是,must_not 語句不會影響評分,它的作用只是將不相關的文件排除
  • filter 和 must 一樣,匹配 filter 選項下的查詢條件的文件才會被返回,但是 filter 不評分,只起到過濾功能,與 must_not 相反

假設要查詢 title 中包含關鍵詞 java,並且 price 不能高於 70,description 可以包含也可以不包含虛擬機器的書籍,構造 bool 查詢語句如下:

GET tablesname(表名)/_search

{
  "query": {
    "bool": {
      "must":
        {
        "match": {
          "fields(欄位)":"value(值)"
        }
      }
    }
  }
}

示例:

GET books/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "status": 1
        }
      },
      "must_not": {
        "range": {
          "price": {
            "gte": 70
          }
        }
      },
      "must": {
        "match": {
          "title": "java"
        }
      },
      "should": [
        {
          "match": {
            "description": "虛擬機器"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}