1. 程式人生 > >和我一起打造個簡單搜尋之ElasticSearch入門

和我一起打造個簡單搜尋之ElasticSearch入門

本文簡單介紹了使用 Rest 介面,對 es 進行操作,更深入的學習,可以參考文末部分。

環境

本文以及後續 es 系列文章都基於 5.5.3 這個版本的 elasticsearch ,這個版本比較穩定,可以用於生產環境。

系列文章

基礎概念

索引--相當於資料庫
型別--相當於表
文件--相當於一條記錄
分片--對索引進行分片,分佈於叢集各個節點上,降低單個節點的壓力
備份--拷貝分片就完成了備份


基本語法

索引

索引型別

  • 結構化索引
    • 特點:通過介面建立,可以指定 mappings
    • url:port/索引名/型別名/_mappings
  • 非結構化索引
    • 特點:通過 elasticsearch head 建立 mapping 為空

使用 RestClient/PostMan 建立結構化索引

建立一個 people 的索引,包含一個型別 man

{
    "settings":{
        "number_of_shards":3,
        "number_of_replicas":1
    },
    "mappings":{
        "man":{
            "properties":{
                "name":{
                    "type":"text"
                },
                "country":{
                    "type":"keyword"
                },
                "age":{
                    "type":"integer"
                },
                "date":{
                    "type":"date",
                    "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                }
            }
        }
    }
}

keyword 與 text 的區別

type 型別為 keyword 的時候,ES 不會對其進行分詞,而 text 會被分詞

es 通過 rest 介面對資料操作

插入資料

  1. 指定文件 id 插入
    1. PUT 請求: ip:port/索引/型別/id
  2. 自動產生文件 id 插入
    1. POST 請求: ip:port/索引/型別

修改資料

  1. 直接修改
    1. POST 請求: ip:port/索引/型別/id/_update

刪除資料/刪除索引

  1. 刪除文件
    1. DELETE 請求 ip:埠/索引/型別/id
  2. 刪除索引
    1. DELETE 請求 ip:埠/索引

查詢資料

  1. 簡單查詢
    1. GET 請求: ip:埠/索引/型別/id
  2. 條件查詢
    1. POST請求: ip:埠/索引/_search
    2. 指定條件查詢,分頁與排序
      json { "query":{ "match":{ "name":"WeJan" } }, "sort":[ { "age":{ "order":"asc" } } ], "from" : 0, "size" : 10 }
  3. 聚合查詢
    1. POST請求: ip:埠/索引/_search
    2. 分組,可以多個分組
      json { "aggs":{ "group_by_age":{ "terms":{ "field":"age" } } } }
    3. 聚合計算
      json { "aggs":{ "age_count":{ "stats":{ "field":"age" } } } }
      • sum
      • avg
      • max
      • min
      • count

高階查詢

  1. 習語匹配(全詞匹配)
    json { "query":{ "match_phrase":{ "name":"WeJan" } } }
  2. 多欄位匹配,多個欄位包含query
    json { "query":{ "multi_match":{ "query":"WeJan", "fields":["author", "title"] } } }
  3. query_string 文字查詢
    json { "query":{ "query_string":{ "name":"(WeJan AND Jan) OR 哈哈" } } }

  4. 針對多個欄位的文字查詢
    json { "query":{ "query_string":{ "name":"WeJan OR 哈哈", "fields":["author", "title"] } } }

  5. 欄位查詢,比如年齡,分類
    json { "query":{ "term":{ "age":25 } } }

  6. 範圍查詢,可以對時間欄位進行查詢,現在使用 "now"替代
    json { "query":{ "range":{ "age":{ "gte":26, "lte":36 } } } }

參考