1. 程式人生 > >elasticsearch基本操作二

elasticsearch基本操作二

1.資料準備

PUT data
{
  "settings":{
    "number_of_replicas":0,
    "number_of_shards":3
  }, 
  "mappings":{
    "user": {
      "properties": {
        "name":{"type":"text"},
        "address":{"type":"text"},
        "age":{"type":"integer"},
        "interests":{"type":"text"},
        "birthday":{"type":"date"}
      }
    }  
  }
}

PUT data/user/1
{
  "name":"jack",
  "address":"beijing",
  "age":23,
  "interests":"programing",
  "birthday":"2018-11-12"
}

PUT data/user/2
{
  "name":"tom",
  "address":"shanghai",
  "age":13,
  "interests":"programing fb bk",
  "birthday":"2018-03-15"
}

PUT data/user/3
{
  "name":"jack3",
  "address":"nanjing",
  "age":10,
  "interests":"fb lol",
  "birthday":"2018-08-25"
}

2.term(s)查詢,適合keyword numeric date

GET data/user/_search
{
  "query": {
    "term": {
      "name": "jack3"
    }
  }
}

GET data/user/_search
{
  "query": {
    "terms": {
      "name": ["jack3","jack"]
    }
  }
}

注:其實就是查詢條件不分詞 直接走倒排索引查文件

3.match(multi_match)查詢

GET data/user/_search 
{
  "query": {
    "match": {
      "name": "jack jack3"
    }
  }
}

GET data/user/_search
{
  "query": {
    "multi_match": {
      "query": "tom",
      "fields": ["name", "address"]
    }
  }
}

注:查詢條件先分詞 再走倒排索引查文件

4.短語查詢,也是不分詞查詢

GET data/user/_search
{
  "query": {
    "match_phrase": {
      "interests": "fb bk"
    }
  }
}

GET data/user/_search
{
  "query": {
    "match_phrase_prefix": {
      "name": "jack"
    }
  }
}

*5.wildcard查詢(代表0個多個詞 ?代表任意一個詞)

GET data/user/_search
{
  "query": {
    "wildcard": {
      "name": "jack?"
    }
  }
}

GET data/user/_search
{
  "query": {
    "wildcard": {
      "name": "jack*"
    }
  }
}

6.模糊查詢

GET data/user/_search
{
  "query": {
    "fuzzy": {
      "name": "jagk"
    }
  }
}

注:這裡有點特表要注意下

7.高亮顯示查詢

GET data/user/_search
{
  "query": {
    "match": {
      "name": "jack"
    }
  },
  "highlight": {
    "fields": {
      "name":{}
    }
  }
}

8.範圍

# 日期
GET data/user/_search
{
  "query": {
    "range": {
      "birthday": {
        "from": "2018-03-15",
        "to": "2018-11-12"
      }
    }
  }
}

# 年齡
GET data/user/_search
{
  "query": {
    "range": {
      "age": {
        "from": 10,
        "to": 23,
        # 不包含 10
        "include_lower": false,
        # 不包含 23
        "include_upper": false
      }
    }
  }
}

9.排序(sort)

GET data/user/_search 
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}

10.分頁查詢

GET data/user/_search 
{
  "from": 0,
  "size": 2, 
  "version": true, 
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

11.指定查詢結果(_source)

GET data/user/_search
{
  "query": {
   "match_all": {}
  },
  "_source": ["name", "age"]
}

注:_source也可以用萬用字元

GET data/user/_search
{
  "query": {
    "match_all": {}
  },
  "_source": {
    "includes": ["name", "a*"],
    "excludes": ["age"]
  }
}