1. 程式人生 > >Es學習第七課, term、terms、match等基本查詢語法

Es學習第七課, term、terms、match等基本查詢語法

  term、terms查詢

 term query會去倒排索引中尋找確切的term,它並不知道分詞器的存在,這種查詢適合keyword、numeric、date等明確值的

term:查詢某個欄位裡含有某個關鍵詞的文件

GET /customer/doc/_search/
{
  "query": {
    "term": {
      "title":   "blog"
    }
  }
}

terms:查詢某個欄位裡含有多個關鍵詞的文件

GET /customer/doc/_search/
{
  "query": {
    "terms": {
      
"title": [ "blog","first"] } } }

match查詢

match query 知道分詞器的存在,會對field進行分詞操作,然後再查詢

GET /customer/doc/_search/
{
  "query": {
    "match": {
      "title":  "my ss"   #它和term區別可以理解為term是精確查詢,這邊match模糊查詢;match會對my ss分詞為兩個單詞,然後term對認為這是一個單詞
    }
  }
}

match_all:查詢所有文件

GET /customer/doc/_search/
{
  
"query": { "match_all": {} } }

multi_match:可以指定多個欄位

GET /customer/doc/_search/
{
  "query": {
    "multi_match": {
      "query" : "blog",
      "fields":  ["name","title"]   #只要裡面一個欄位包含值 blog 既可以
    }
  }
}

match_phrase:短語匹配查詢

ES引擎首先分析查詢字串,從分析後的文字中構建短語查詢,這意味著必須匹配短語中的所有分詞,並且保證各個分詞的相對位置不變

 

_source:當我們希望返回結果只是一部分欄位時,可以加上_source

GET /customer/doc/_search/
{
  "_source":["title"],  #只返回title欄位
  "query": {
    "match_all": {}
  }
}

排序

使用sort實現排序(類似sql):desc 降序,asc升序

fuzzy實現模糊查詢

value:查詢的關鍵字

boost:查詢的權值,預設值是1.0

min_similarity:設定匹配的最小相似度,預設值0.5,對於字串,取值0-1(包括0和1);對於數值,取值可能大於1;對於日期取值為1d,1m等,1d等於1天

prefix_length:指明區分詞項的共同字首長度,預設是0

GET /customer/doc/_search/
{
   
  "query": {
    "fuzzy": {
      "name": {
        "value": "blg"
      }
    }
  } 
}

#返回:
{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.19178805,
    "hits": [
      {
        "_index": "customer",
        "_type": "doc",
        "_id": "1",
        "_score": 0.19178805,
        "_source": {
          "name": "blog",
          "tags": [
            "testing"
          ],
          "title": "i am a doc"
        }
      }
    ]
  }
}