ES安裝和學習

ES學習
Elasticsearch分佈式全文檢索引擎,它可以近乎實時的存儲、檢索數據。本身擴展性很好,可以擴展到上百臺服務器
cluster(集羣)
node(節點) 
index(索引)    數據庫
type(類型)      表
document(文檔)  行
field(域)       列
Mapping(映射) 存儲域field的相關映射信息,不同type會有不同的mapping。
shards&&Replicas(分片和副本) 數據可以分爲較小的分片。每個分片放到不同的服務器上  爲提高查詢吞吐量或實現高可用性,可以使用分片副本  主分片(Primary shard) 副本分片(Replica shard)    

安裝
tar es
vi elasticsearch.yml
cluster.name: my-test  同一個集羣必須一樣
node.name: node-1 節點名稱必不一樣
node.master: true  可以成爲master
node.data: true
network.host: 10.8.4.37  真實ip  http.port: 9200 默認端口
discovery.seed_hosts 當您想要與其他主機上的節點組成羣集時,你必須使用 discovery.seed_hosts 來提供羣集中可以成爲master
cluster.initial_master_nodes: ["node-1", "node-2"]  初始化選master

###sysctl -w vm.max_map_count=262144 es最小內存
vi /etc/security/limits.conf  加入
esuser hard nofile 65536
esuser soft nofile 65536

安裝時一定要切換到普通用戶(非root賬號)!!  創建用戶!!!1
groupadd esgroup
useradd esuser -g esgroup  -p espassword
chown -R esuser:esgroup elasticsearch-6.3.2(賦予該目錄下雖有的文件都可以操作執行的權限).
su esuser
./elasticsearch -d 後臺啓動,可在當前終端繼續操作  8以上的版本需要1.9上啓動   -Xms512m -Xmx512m

web頁面查看
ElasticSearch Head.zip拖入到chrome擴展程序就可以使用了
###################### 使用head等插件監控集羣信息,需要打開以下配置項 ###########
# http.cors.enabled: true
# http.cors.allow-origin: "*"
# http.cors.allow-credentials: true


linux安裝jdk
wget http://download.oracle.com/otn-pub/java/jdk/9.0.1+11/jdk-9.0.1_linux-x64_bin.tar.gz   file看類型  html文件所以解壓不了
tar -zxvf ./jdk-9.0.1_linux-x64_bin.tar.gz -C /usr/local
vi /etc/profile
#set java environment
JAVA_HOME=/usr/local/jdk-9.0.1/jdk-9.0.1
JRE_HOME=/usr/local/jdk-9.0.1/jdk-9.0.1/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
source /etc/profile

增刪改查
PUT test/doc/2   修改或新建
{
  "name":"wangfei",
  "age":27,
  "desc":"熱天還不讓後人不認同"
}
GET test 查索引
GET test/doc/1 查文檔信息
GET test/doc/_search  查詢所有
DELETE test/doc/3 DELETE test 刪除索引
POST test/doc/1/_update 修改
{  
  "doc":{
    "desc":"生活就像 茫茫海上"
  }
}
查詢!!!!
GET test/doc/_search?q=name:wangfei
結構化查詢  篩選
GET test/doc/_search
{
  "query":{
    "match":{
      "name":"wang"
    }
  }
}
elasticsearch在內部對文檔做分詞的時候,對於中文來說,就是一個字一個字分的,所以,我們搜中國,中和國都符合條件
可以用match_phrase 或者針對中文的插件
match_phrase_prefix最左  match返回所有匹配的分詞
multi_match
倒敘排序
"sort": [
    {
      "age": {
        "order": "desc"
      }
    }
 ]
 分頁查詢   是內存分頁
 "query": {
    "match_phrase_prefix": {
      "name": "wang"
    }
  },
  "from": 0,
  "size": 1
}

bool查詢  must 必須滿足  should (只要符合其中一個條件就返回)
#### 多條件組合查詢
GET test/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "wanggfei"
          }
        },{
          "match": {
            "age": 25
          }
        }
      ]
    }
  }
}
filter(條件過濾查詢,過濾條件的範圍用range表示gt表示大於、lt表示小於、gte表示大於等於、lte表示小於等於)
"filter": {
        "range": {
          "age": {
            "gte": 10,
            "lt": 27
          }
        }
      }
bool查詢總結!!!
must:與關係,相當於關係型數據庫中的 and。
should:或關係,相當於關係型數據庫中的 or。
must_not:非關係,相當於關係型數據庫中的 not。
filter:過濾條件。
range:條件篩選範圍。
gt:大於,相當於關係型數據庫中的 >。
gte:大於等於,相當於關係型數據庫中的 >=。
lt:小於,相當於關係型數據庫中的 <。
lte:小於等於,相當於關係型數據庫中的 <=。

只需要查看name和age兩個屬性,提高查詢效率"_source": ["name","age"]
!!!!!
精確查詢與模糊查詢  term則不經過分詞!!,它是直接去倒排索引中查找了精確的值了  match是經過analyer,會分詞,注意不同類型查詢會不會分詞
t1類型爲text,會經過分詞!!!  t2類型爲keyword類型,不會經過分詞!!!
多個精確值(terms)
GET test/doc/_search
{
  "query": {
    "terms": {
      "age": [
        "27",
        "28"
      ]
    }
  }
}

聚合查詢avg、max、min、sum  被封裝在aggs中,而my_avg則是爲查詢結果起個別名,封裝了計算出的平均值
GET zhifou/doc/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "my_max": {
      "max": {
        "field": "age"
      }
    }
  },
  "size": 0, 
  "_source": ["name","age","from"]
}

get返回 別名aliases   mappings信息:包括索引類型doc  settings設置。包括該索引的創建時間,主副分片的信息,UUID等等

字段數據類型:
文本(text)、關鍵字(keyword)、日期(data)、整形(long)、雙精度(double)、布爾(boolean)或ip  JSON的層次結構性質的類型

index屬性默認爲true,如果該屬性設置爲false,那麼,elasticsearch不會爲該屬性創建索引,也就是說無法當做主查詢條件
number_of_shards是主分片數量(每個索引默認5個主分片),而number_of_replicas是複製分片,默認一個主分片搭配一個複製分片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章