1. 程式人生 > 其它 >Elasticsearch 各種query語法

Elasticsearch 各種query語法

技術標籤:Elasticsearch實戰elasticsearch

Elasticsearch實戰

準備幾條資料

POST /vehicle/car/_bulk
{"index":{"_id":1}}
{"name":"benz","detail":"suv sport","price":550000,"tags":["SUV","Sport"]}
{"index":{"_id":2}}

{"name":"bmw","detail":"benz zs","price":350000,"tags":["Zs"]}

match all

匹配所有

GET /vehicle/car/_search
{
  "query": {
    "match_all": {}
  }
}

match

匹配filed包含文字

GET /vehicle/car/_search
{
  "query": {
    "match": {
      "name": "benz"
    }
  }
}

multi match

和match類似,使用多個filed匹配

GET /vehicle/car/_search
{
  "query": {
    "multi_match": {
      "query": "benz",
      "fields": ["name","detail"]
    }
  }
}

range query

range 範圍查詢,可以放在query或filter裡面,在query裡面會對相關度分數產生影響

GET /vehicle/car/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 300000,
        "lte": 400000
      }
    }
  }
}

term query

term是代表完全匹配,也就是精確查詢,搜尋前不會再對搜尋詞進行分詞拆解。

舉個例子:

{
"match": { "title": "my cat"}
}

match會拆分my和cat,相當於term("my")或term("cat“)

{
"bool": {
"should": [
{ "term": { "title": "my" }},
{ "term": { "title": "cat" }}
]
}
}

GET /vehicle/car/_search
{
  "query": {
    "term": {
      "name": {
        "value": "benz"
      }
    }
  }
}

terms query

同term,指定多個搜尋詞

GET /vehice/car/_search
{
  "query": {
    "terms": {
      "name": [
        "benz",
        "bmw"
      ]
    }
  }
}

existquery

field不能為空(null)

GET /vehicle/car/_search
{
  "query": {
    "exists": {
      "field": "name"
    }
  }
}

歡迎關注公眾號《小馬JAVA》