Elasticsearch-基本操作

elasticsearch概念(集合了數據保存和數據分析的一個搜索引擎)

1.集羣:一個或者多個節點組織在一起
2.節點:一個節點是集羣中的一個服務器,默認是隨機的一個漫畫角色
3.分片:將索引劃分爲多分的能力,允許水平分割和拓展容量,多個分片相應請求,提高性能和吞吐量
4.副本:就是備份X份,可分配在多個服務器

elasticsearch與數據庫的對應關係:

index-數據庫
type-表
documents-行
fields-列

在kibana中進行所有elasticsearch的操作

在kibana中創建索引(數據庫):

建立索引,注意不是“ ”而是“”;不是空格而是下劃線,原生的關鍵字都前面帶“

number_of_shards:分片不可以修改
number_of_replicas:備份可以修改

    PUT lagou
    {
      "settings": {
        "index": {
          "number_of_shards":5,
          "number_of_replicas":1
        }
      }
    }

獲取信息

#GET獲取信息 
GET lagou/_settings
GET _all/_settings

保存文檔,插入數據,ID唯一

#PUT保存文檔
PUT lagou/job/1
{
  "title":"python研發",
  "salary_min":1000000,
  "city":"深圳",
  "company":{
    "name":"baidu百度",
    "addr":"南山"
  },
  "publish_date":"2017-4-16",
  "compents":15
}

#post插入數據,不指明id的話,用post
PUT lagou/job/2
{
  "title":"python研發",
  "salary_min":2000000,
  "city":"深圳",
  "company":{
    "name":"baidu百度",
    "addr":"南山"
  },
  "publish_date":"2017-4-16",
  "compents":15
}

修改數據

#方法一,把全部數據列出來覆蓋修改 
PUT lagou/job/AV6PBQZEIcVdkiaxlbUt
{
  "title":"python研發",
  "salary_min":2000000,
  "city":"北京",
  "company":{
    "name":"baidu百度",
    "addr":"南山"
  },
  "publish_date":"2017-4-16",
  "compents":15
}

#方法二 ,只局部更新數據,注意“doc”
POST lagou/job/1/_update
{
  "doc":{
    "company":{
      "addr":"USA"
    }
  }
}

刪除數據

#刪除
DELETE index/type/id

批量操作,ES批量操作 使用_mget,_bulk

GET _mget
{
  "docs":[
    {
      "_index":"lagou",
      "_type":"job",
      "_id":1
    },
    {
      "_index":"lagou",
      "_type":"job",
      "_id":2
    },
    {
      "_index":"lagou",
      "_type":"jobs",
      "_id":1
    }
    ]
}

#在GET中加入index可以省略在數據中指明index,type同理
GET lagou/_mget
{
  "docs":[
    {
      "_type":"job",
      "_id":1
    },
    {
      "_type":"job",
      "_id":2
    },
    {
      "_type":"jobs",
      "_id":1
    }
    ]
}

#bulk支持同時多個操作,支持index,delete,create,update,注意要不可回車換行
#寫法:action_and_meta_data\n
      option_source\n
POST _bulk    
# 
{"creat":{"_index":"test","_type":"type1","_id":1}}
{"field":"value"}
#
{"delete":{"_index":"test","_type":"type1","_id":1}}
#
{"index":{"_index":"test","_type":"type1","_id":1}}
{"field":"value"}
#
{"update":{"_index":"test","_type":"type1","_id":1}}
{"doc":{"field":"value"}}

#不要換行
POST _bulk
{"index":{"_index":"lagou","_type":"job","_id":1}}
{"title":"python研發","salary_min":1000000,"city":"深圳","company":{"name":"baidu百度","company_addr":"南山"},"publish_date":"2017-4-16","comment":15}
{"index":{"_index":"lagou","_type":"job","_id":2}}
{"title":"C++研發","salary_min":2000000,"city":"北京","company":{"name":"阿里巴巴","company_addr":"豐臺"},"publish_date":"2017-4-17","comment":16}
{"index":{"_index":"lagou","_type":"job","_id":3}}
{"title":"Java研發","salary_min":3000000,"city":"廣州","company":{"name":"騰訊","company_addr":"花都"},"publish_date":"2017-4-18","comment":17}
{"index":{"_index":"lagou","_type":"job","_id":4}}
{"title":"PHP研發","salary_min":4000000,"city":"上海","company":{"name":"小米","company_addr":"陸家嘴"},"publish_date":"2017-4-19","comment":18}

查看analyze分析結果

GET _analyze
{
  "analyzer": "ik_max_word"(選擇分析器),
  "text": "需要分析的內容"
}

建立映射(mappings),預先定義字段類型及其屬性,已經創建了mappings之後不可以修改mappings信息類型,但可以新增信息類型

有時候range,term等不好用,很可能就是mappings沒做好

內置類型

string類型:text,keyword
數字類型:long,integer,short,byte,double,float
日期類型:date
布爾類型:boolean
binary(二進制)類型:binary
複雜類型:object,nested
geo類型:geo-point,geo-shape
專業類型:ip,competion

內置屬性(主要屬性)

store: yes標識字段會存儲
index: yes標識會分析
null_value:如果字段爲空,可是設置默認值
analyzer:設置分析器,中文分詞器用ik
include_in_all:默認es爲每個字段定義的域_all, false則不可搜索
format:時間格式字符串的模式

創建mappings:

#creat mappings
PUT lagou
{
  "mappings":{
    "job":{
      "properties":{
        "title":{
          "type":"text",
          "analyzer":"ik_max_word"
        },
        "salary_min":{
          "type":"integer"
        },
        "city":{
          "type":"keyword"
        },
        "company":{
          "properties":{
            "name":{
              "type":"text",
              "analyzer":"ik_max_word"
            },
            "company_addr":{
              "type":"text"
            }
          }
        },
        "publish_date":{
          "type":"date",
          "format":"yyyy-mm-dd"
        },
        "comment":{
          "type":"integer"
        }
      }
    }
  }
}

獲取mappings信息:

GET _all/_mappings  
GET index/_mappings

elasticsearch屬性信息

這裏寫圖片描述

搜索參考文檔

elasticsearch簡單搜索

1.基本查詢:使用ES內置查詢條件進行查詢,參與打分
2.組合查詢:多個查詢組合在一起進行復合查詢
3.過濾:通過filter條件在不影響打分的情況下篩選數據

1.match查詢:傳入字符串利用analyzer進行分詞

GET index/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}

2.term查詢:傳遞進來的查詢值不做處理(不好用)

GET index/_search
{
  "query": {
    "term": {
      "FIELD": "TEXT"
    }
  }
}

3.terms查詢:FIELD列表內的關鍵字都會被查詢到

    GET lagou/_search
    {
      "query": {
        "terms": {
          "FIELD": []
        }
      }
    }

4.“from”,”size”進行分頁控制,from控制從第幾個搜索結果開始展示,size表示暫時數據的長度

GET index/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  },
  "from":1
  "size":10
}


5.match_all:返回所有數據信息

GET lagou/_search
{
  "query": {
    "match_all": {}
  }
}

elasticsearch短語查詢

1.match_phrase
GET lagou/_search
{
“query”: {
“match_phrase”: {
“FIELD”: {
“query”: “TEXT”,
“slop”:integer,數字表示分詞後的詞間距
}
}
}
}

2.multi_match

GET lagou/_search
{
  "query": {
    "multi_match": {
      "query":"TEXT",
      "fields":["FIELD1","FIELD2"]
      }
    }
  }
}

elasticsearch搜索結果排序

sort排序,order指定排序方式,asc升序,desc降序

GET index/_search
{
  "query": {
    "match_all": {},
  },
  "sort": [
    {
      "FIELD": {
        "order": "desc"
      }
    }
  ]
}

elasticsearch range查詢

gte:大於等於; gt:大於; lte:小於等於; lt:小於; boots:表示權重

    GET lagou/_search
    {
      "query": {
        "range": {
          "FIELD": {
            "gt": integer,
            "lt": integer
          }
        }
      },
      "sort": [{
        "FIELD": {
          "order": "desc"
          }
        }
      ]
    }

elasticsearch 模糊查詢

wildcard是模糊查詢功能,value中的“*”標識通配符

GET lagou/_search
{
  "query": {
    "wildcard": {
      "FIELD": {
        "value": "TEXT",
        "boost": integer
      }
    }
  }
}

elasticsearch bool查詢

filter:字段過濾並且不參與打分,過濾掉非數組內的內容
must:滿足數組中所有的條件,“與”
should:數組中的查詢條件滿足一個或多個,“或”
must_not:數組中的查詢條件一個都不能去滿足,“非”

“bool”:{
“filter”:[],
“must”:[],
“should”:[],
“must_not”:[]
}

默認獲取所有數據

GET test_data/position/_search
{
  "query": {
    "bool": {
      "must": [{
        "match_all":{}
      }],
      "filter": {
        "terms": {
          "FIELD": "query"
        }
      },
      "must_not": [{
        "match": {
          "FIELD": "query"
        }
      }],
      "should": [{
        "match": {
          "FIELD": "query"
        }
      }]
    }
  }
}

嵌套查詢

查找空值

GET test_data/position/_search
{
  "query": {
    "bool": {
      "filter": {
        "exists": {
          "field": "FIELD"(列表名)
        }
      }
    }
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章