服務器環境 准備三台服務器集群 服務器名稱 IP地址 node-1 192.168.1.182 node-2 192.168.1.183 node-3 192.168.1.184 服務集群配置 vi elasticsearch.yml cluster.name: myes ###保證三台服務器節點集群名稱相同 node.name: node-1 #### 每個節點名稱不一樣 其他兩台為node-1 ,node-2 network.host: 192.168.1.180 #### 實際服務器ip地址 discovery.zen.ping.unicast.hosts: ["192.168.1.182", "192.168.1.183","192.168.1.184"]##多個服務集群ip discovery.zen.minimum_master_nodes: 1 關閉防火牆 systemctl stop firewalld.service 默認底層開啟9300 集群 驗證集群效果 http://192.168.1.184:9200/_cat/nodes?pretty 注意克隆data文件會導致數據不同步 報該錯誤解決辦法 failed to send join request to master 因為克隆導致data文件也克隆呢,直接清除每台服務器data文件。 *號表示為master節點
#es常用restful操作接口
# 查詢索引
GET http://localhost:9200/_cat/indices?v
# 刪除索引
DELETE http://localhost:9200/indexname
根據id進行查詢
GET /selfindex/user/12
查詢當前所有類型的文檔
GET /selfindex/user/_search
根據多個ID批量查詢
查詢多個id分別為1、2
GET /selfindex/user/_mget
{
"ids":["1","2"]
}
復雜條件查詢
查詢年齡為年齡21歲
GET /selfindex/user/_search?q=age:21
查詢年齡30歲-60歲之間
GET /selfindex/user/_search?q=age[30 TO 60]
注意:TO 一定要大寫
查詢年齡30歲-60歲之間 並且年齡降序、從0條數據到第1條數據
GET /selfindex/user/_search?q=age[30 TO 60]&sort=age:desc&from=0&size=1
查詢年齡30歲-60歲之間 並且年齡降序、從0條數據到第1條數據,展示name和age字段
GET /selfindex/user/_search?q=age[30 TO 60]&sort=age:desc&from=0&size=1
&_source=name,age
Dsl語言查詢與過濾
什么是DSL語言
es中的查詢請求有兩種方式,一種是簡易版的查詢,另外一種是使用JSON完整的請求體,叫做結構化查詢(DSL)。
由於DSL查詢更為直觀也更為簡易,所以大都使用這種方式。
DSL查詢是POST過去一個json,由於post的請求是json格式的,所以存在很多靈活性,也有很多形式。
根據名稱精確查詢姓名
GET selfindex/user/_search { "query": { "term": { "name": "xiaoming" }
}
} |
##term是代表完全匹配,即不進行分詞器分析,文檔中必須包含整個搜索的詞匯
根據汽車名稱模糊查詢
GET /selfindex/user/_search { "from": 0, "size": 2, "query": { "match": {
"car": "奧迪" } } } |
####match查詢相當於模糊匹配,只包含其中一部分關鍵詞就行
#根據條件刪除
POST selfindex/user/_delete_by_query
{"query":{
"match":{"name":"zs"}
}}
#根據條件查詢
POST selfindex/user/_search
{"query":{
"match":{"name":"zs"}
}}
Term與Match區別
Term查詢不會對字段進行分詞查詢,會采用精確匹配。
Match會根據該字段的分詞器,進行分詞查詢。
使用filter過濾年齡
GET /selfindex/user/_search { "query": { "bool": { "must": [{ "match_all": {} }], "filter": { "range": { "age": { "gt": 21, "lte": 51 } }
}
}
}, "from": 0, "size": 10, "_source": ["name", "age"]
} |
#es常用數據類型
基本類型
符串:string,string類型包含 text 和 keyword。
text:該類型被用來索引長文本,在創建索引前會將這些文本進行分詞,轉化為詞的組合,建立索引;允許es來檢索這些詞,text類型不能用來排序和聚合。
keyword:該類型不需要進行分詞,可以被用來檢索過濾、排序和聚合,keyword類型自讀那只能用本身來進行檢索(不可用text分詞后的模糊檢索)。
注意: keyword類型不能分詞,Text類型可以分詞查詢
數指型:long、integer、short、byte、double、float
日期型:date
布爾型:boolean
二進制型:binary
數組類型(Array datatype)
復雜類型
地理位置類型(Geo datatypes)
地理坐標類型(Geo-point datatype):geo_point 用於經緯度坐標
地理形狀類型(Geo-Shape datatype):geo_shape 用於類似於多邊形的復雜形狀
特定類型(Specialised datatypes)
Pv4 類型(IPv4 datatype):ip 用於IPv4 地址
Completion 類型(Completion datatype):completion 提供自動補全建議
Token count 類型(Token count datatype):token_count 用於統計做子標記的字段的index數目,該值會一直增加,不會因為過濾條件而減少
mapper-murmur3 類型:通過插件,可以通過_murmur3_來計算index的哈希值
附加類型(Attachment datatype):采用mapper-attachments插件,可支持_attachments_索引,例如 Microsoft office 格式,Open Documnet 格式, ePub,HTML等