文章目錄
一:ElasticSearch簡介
ElasticSearch:(solr與Lucene與其類似)
- 是一個基於Lucene的搜索服務器(ES)—數據庫
- 專門爲分佈式環境設計
- 封裝了luence的檢索細節,只是走restfulapi。
- 近乎實時的存儲、檢索數據;本身擴展性很好
- 通過簡單的RESTful API來隱藏Lucene的複雜性
- 文件內容搜索的數據庫----反向檢索
二:ElasticSearch優缺點:
優點:
在數據量較大的時候可以進行快速搜索,並且本身還帶有分詞器,可以對elasticSearch內的數據進行分詞搜索。有利於數據管理。
缺點:
1.在需要添加新數據與新字段的時候,如果elasticSearch進行搜索是可能需要重新修改格式。之前的數據需要重新同步,對數據的管理有很多困難。
2.許多mysql可以搜索到的東西,在elasticSearch裏就不能搜或很難搜
三:ElasticSearch用法
分片:索引指向一個或多個分片得邏輯命名空間,即一篇文章拆成多份
主分片:默認分5片,索引首先被存儲在主分片中,並複製相應得副本分片
副本分片:一旦主分片失效,副分片晉升爲主分片
主節點:負責創建索引,刪除,分配分片數,追蹤節點狀態
節點:一個集羣由多個節點組成,一個節點是es實例,默認每個節點都爲候選主節點與數據節點
倒排索引:根據關鍵字倒過來找文章
ElasticSearchCRUD:
創建index(庫):
# 通過hash映射來確定副本得存儲位置
# 通過路由計算hash(routing) % number_of_primary_shards(分片)來得到存儲得位置
# 建索引
PUT demo.1234
{
"settings" :{
"index" :{
"number_of_shards" : 2, # 主分片數量 默認爲5
"number_of_replicas" : 2 # 副本數量,默認爲1爲不設
}
}
}
創建Type(表):
postman上輸入對應傳送方式,URL
在body請求的raw處傳送json格式:
在raw中輸入json格式命令:
{
"settings" : {
# 加了index索引之後會硬盤
# "index" : {}一般不加
"number_of_shards" : 3,
"number_of_replicas" : 1
},
"mappings" : {
# 建type 表
"userinfos" : {
# 建 document 行
"properties" : {
# 建 field 列
"userid" : { "type" : "integer" },
"username" : { "type" : "keyword" },
"birthday" : {
"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"say" : { "type" : "text" }
}
}
}
}
Create:插入field信息
postman上輸入對應傳送方式,URL
在body請求的raw處傳送json格式:
在raw中輸入json格式命令:
{
"settings" : {
"number_of_shards" : 3, # 主分片爲3
"number_of_replicas" : 1 # 副本不設
},
"mappings" : {
"userinfos" : {
"properties" : {
"userid" : { "type" : "integer" },
"username" : { "type" : "keyword" },
"birthday" : {
"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"say" : { "type" : "text" }
}
}
}
}
Update:更新field信息
postman上輸入對應傳送方式,URL中輸入修改id和表和update命令
在body請求的raw處傳送json格式:
在raw中輸入json格式命令:
{
"doc" : {
"username" : "lisi"
}
}
Delete:刪除field信息
postman上輸入對應傳送方式,URL中輸入修改id和表
然後直接send即可刪除
將文章關鍵詞分
Read:查找
-
match_phrase:短語查詢不能分割,需要連着查
-
match_all:查所有
-
match_phrase_prefix:短語前綴查詢,前面都和match_phrase一樣,最後一個分詞作爲前綴匹配
-
match: 布爾匹配查詢:只要查到分詞當中其中任意一個,就可以查到
-
multi_match:多字段匹配查詢
{
"query": {
# 查詢兩個字段中是否都有該值的document
"multi_match": {
"query": "John like cooking",
"fields": ["name","interest"]
}
}
}
四:linux下的ElasticSearch安裝及環境配置
第一步:首先我們需要安裝3臺虛擬機,以此模擬集羣環境。
第二步:在3臺虛擬機下都配置好jdk環境,jdk的安裝和shell腳本安裝我以前的文章有寫過。
再次提供傳送門—
https://blog.csdn.net/qq_35050438/article/details/106081902
https://blog.csdn.net/qq_35050438/article/details/106199592
第三步:我們下載好ElasticSearch6.2.2tar包後,將其放在/opt下解壓後,將其在放在/soft/elasticsearch622/目錄下
tar -zxvf elasticsearch6.2.2.tar.gz
mv elasticsearch6.2.2 /soft/elasticsearch622
第四步:修改配置文件config下的elasticsearch.yml文件
vi /opt/soft/elasticsearch622/config/elasticsearch.yml
- 集羣名稱
cluster.name: es-app #集羣名稱,可以自行修改
- 本機作爲節點的名字
node.name: es-1 #節點名稱,自行修改
- 主機地址和端口號
network.host: 192.168.235.133 #主機地址,這裏寫本機IP
http.port: 9200 #端口
- 跨域訪問設置
http.cors.enabled: true #設置跨域
http.cors.allow-origin: "*" #設置訪問
第五步:添加linux用戶,並設置密碼
useradd nicedays
passwd nicedays
# 然後設置新密碼
第六步:此時就可以去啓動elasticsearch了,但是往往會出錯,第五步總結一下幾處出錯:
1. 系統最大文件數太低
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
- 解決辦法:修改 vi /etc/security/limits.conf 文件末尾追加
用戶名 soft nofile 65536
用戶名 hard nofile 131072
用戶名 soft nproc 4096
用戶名 hard nproc 4096
2. 虛擬內存太低
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
- 解決辦法:修改vi /etc/sysctl.conf文件末尾追加
vm.max_map_count=655360
保存退出後輸入命令更新文件
sysctl -p
3.用戶訪問權限不夠
java.nio.file.AccessDeniedException: …/elasticsearch-6.2.2/config/jvm.options
- 解決辦法:因爲我們是用普通用戶登的,而elasticsearch是由root解壓移動的,需要root將權限轉給我們普通用戶
chown 用戶名 elasticsearch-6.2.2安裝目錄路徑 -R
第七步:登錄普通用戶並定位到bin目錄,運行elasticsearch
sudo 用戶名
cd /opt/soft/elasticsearch622/bin
./elasticsearch
看到上圖代表登陸成功,成功我們可以去瀏覽器輸入虛擬機的ip:端口號,以此來訪問