Elastic+logstash+head簡單介紹
一. 概述
ElasticSearch是一個基于Lucene的搜索服務(wù)器饺藤。它提供了一個分布式多用戶能力的全文搜索引擎逛钻,基于RESTful web接口蝙砌。
二.ElasticSearch的安裝與簡單配置
1.1. 應(yīng)該始終運(yùn)行最新版本的 Java 虛擬機(jī)( JVM ), 除非 Elasticsearch 網(wǎng)站上另有說明阅悍。? Elasticsearch附鸽, 特別是 Lucene,是一個高要求的軟件文虏。Lucene 的單元測試和集成測試經(jīng)常暴露出 JVM 本身的 bug侣诺。這些 bug 的范圍從輕微的麻煩到嚴(yán)重段錯誤,所以氧秘,最好盡可能的使用最新版本的 JVM
1.2. 下載ElasticSearch
下載地址:https://www.elastic.co/downloads/elasticsearch
如下載最新版本請點(diǎn)TAR年鸳,其他版本請點(diǎn)擊 past releases選擇
1.3.? 解壓安裝包
1.4. 目錄講解:
1. bin:包含運(yùn)行ElasticSearch實例和管理插件的一些腳本
2. Config: 主要是一些設(shè)置文件,如logging丸相,elasticsearch.yml,jvm
3. Lib:包含相關(guān)的包文件等
4. Plugins:包含相關(guān)的插件文件等
5. Logs:日志文件
6. Data:數(shù)據(jù)存放地址
1.5. 零配置啟動
直接進(jìn)入bin目錄下搔确,啟動腳本elasticsearch
./elasticsearch
會顯示如下錯誤:
(1).java.lang.RuntimeException: can not run elasticsearch as root
這是由于elastic之前因為root超級權(quán)限下啟動引發(fā)過血案,所有強(qiáng)制不讓在root下啟動 灭忠。解決方案:
添加elastic啟動用戶:
useradd syliu
passwd syliu
chown -R syliu:syliu elasticsearch-6.1.3
su syliu #
然后進(jìn)入bin目錄下啟動./elasticsearch
(2).max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
這是由于linux下最大打開文件數(shù)量比elastic要求的打開數(shù)量少
查看系統(tǒng)最大打開文件數(shù)量
- ulimit -a (查看)
- ulimit -n 65536(設(shè)置)
或者:
切換到root用戶修改
vim /etc/security/limits.conf
(3).max number of threads [3889] for user [syliu] is too low, increase to at least [4096]
vi /etc/security/limits.d/90-nproc.conf
vim /etc/security/limits.conf
(4).max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改/etc/sysctl.conf配置文件膳算,
cat /etc/sysctl.conf | grep vm.max_map_count
vm.max_map_count=262144
如果不存在則添加
echo "vm.max_map_count=262144" >>/etc/sysctl.conf
1.6. 到此,環(huán)境配置完成,重新啟動項目弛作,項目啟動成功
訪問http://localhost:9200 后會顯示成功提示
(1) name:elastic實例名涕蜂,設(shè)置可以在config/elasticsearch.yml中配置
(2) Version:版本號,以json格式表示的一組信息。
① Name: 當(dāng)前版本號
② build_snapshot:是否從源碼構(gòu)建而來
③ lucene_version:基于lucene的版本
1.7. 簡單配置elastic集群
1. cluster.name:集群名稱映琳。設(shè)置好以后會根據(jù)同一集群名字自動發(fā)現(xiàn)同一網(wǎng)段下的節(jié)點(diǎn)宇葱,如果在同一網(wǎng)段下有多個集群,可以根據(jù)這個字段區(qū)分集群
2. Node.name:節(jié)點(diǎn)名稱刊头,可以自動生成節(jié)點(diǎn)名稱黍瞧,這里配置是有利于利用api訪問具體的節(jié)點(diǎn),建議自己配置
3. Node.master:節(jié)點(diǎn)是否為master主節(jié)點(diǎn)-----每個節(jié)點(diǎn)都可被配置為主節(jié)點(diǎn)原杂。默認(rèn)值為true印颤,目的是指定該節(jié)點(diǎn)是否有資格被選舉成為node。默認(rèn)集群中第一臺集群為master穿肄。如果這臺機(jī)器出現(xiàn)故障年局,集群會自動重新選舉
4. Node.data:設(shè)置節(jié)點(diǎn)是否存儲數(shù)據(jù)际看,默認(rèn)為true,如果不希望存儲矢否,則設(shè)置為false
客戶節(jié)點(diǎn)配置:
Node.master:true
Node.data:false
數(shù)據(jù)節(jié)點(diǎn)配置:
Node.master:false
Node.data:true
5. Network.host: 綁定監(jiān)聽IP,提供外界訪問
6. Transport.tcp.port:設(shè)置節(jié)點(diǎn)間交互的tcp端口
7. Discovery.zen.ping.unicast.hosts:設(shè)置集群中master節(jié)點(diǎn)的初始列表-通過這些節(jié)點(diǎn)來自動發(fā)現(xiàn)新加入的集群
8. discovery.zen.ping_timeout:設(shè)置集群中自動發(fā)現(xiàn)其他節(jié)點(diǎn)時ping連接超時時間-默認(rèn)為3秒仲闽。對于比較差的網(wǎng)絡(luò)環(huán)境可以加大值來防止自動發(fā)現(xiàn)時出錯
9. client.transport.ping_timeout:客戶端連接ping的最大超時時間
10. bootstrap.memory_lock:true 鎖定內(nèi)存,防止內(nèi)存交換
11. http.port:綁定監(jiān)聽ip的端口號僵朗,默認(rèn)9200
12. path.data:數(shù)據(jù)存放位置赖欣,最好不要放在默認(rèn)安裝目錄下,這樣卸載了會引起數(shù)據(jù)丟失验庙,可以保存到不同的目錄下顶吮,最好掛載到不同的磁盤上
配置方法如下:path.data: /path/to/data1,/path/to/data2
啟動elastic會發(fā)現(xiàn)報錯:
memory locking requested for elasticsearch process but memory is not locked
解決辦法:
vim /etc/security/limits.conf
Syliu soft memlock unlimited
Syliu hard memlock unlimited
修改:
/etc/sysctl.conf
vm.swappiness=0
到此:配置完成,然后將本配置粪薛,將本配置拷貝到其他節(jié)點(diǎn)下悴了,注意修改node.name.
如果配置在同一臺服務(wù)器下其他節(jié)點(diǎn)還需要修改端口號,以免端口被占用
三.Logstash的簡單配置與安裝
1.1? Logstash是一個能有效進(jìn)行日志處理的工具违寿,可以對日志進(jìn)行收集湃交,分析。其本身并不產(chǎn)生日志藤巢,它只是一個內(nèi)置分析和轉(zhuǎn)換工具的日志管理工具巡揍,是一個接收,處理,轉(zhuǎn)發(fā)日志的’管道’。
1.2 下載logstash
下載地址:https://www.elastic.co/downloads/logstash
下載壓縮包菌瘪,解壓
1.3 進(jìn)入bin目錄下創(chuàng)建.conf文件作為啟動文件
Logstash處理事件有三個階段:輸入Inputs,過濾Filters,輸出OutPuts
具體參閱:http://udn.yyuap.com/doc/logstash-best-practice-cn/input/stdin.html 或者h(yuǎn)ttps://www.elastic.co/guide/en/logstash/current/input-plugins.html
1.指定file為讀取文件的方式:
input {
file {
type => "guoan"
path => "F:/logs/guoanjia/guoanjia/*.log"
codec => json { charset => "GBK" }
start_position => "beginning"
}
}
type: 標(biāo)記事件類型? 集成java的時候需要用到腮敌。還可以根據(jù)type值做一些過濾的操作
path:為某個絕對路徑文件夾下所有以.log結(jié)尾的文件為數(shù)據(jù)源
codec: 編碼插件: codec 就是用來 decode、encode 事件的
指定輸入到logstash的格式為json格式的俏扩,指定字符集為中文
start_position:從什么位置開始讀取文件數(shù)據(jù)糜工,默認(rèn)是結(jié)束位置
把這個設(shè)定改成 "beginning",logstash 進(jìn)程就從頭開始讀取
除此之外還有一些配置有時候需要手動配上:
discover_interval:logstash 每隔多久去檢查一次被監(jiān)聽的 path 下是否有新文件录淡。默認(rèn)值是 15 秒
exclude:不想被監(jiān)聽的文件可以排除出去
stat_interval:logstash 每隔多久檢查一次被監(jiān)聽文件狀態(tài)(是否有更新)捌木,默認(rèn)是 1 秒
******注意:start_position 僅在該文件從未被監(jiān)聽過的時候起作用。如果 sincedb 文件中已經(jīng)有這個文件的 inode 記錄了嫉戚,那么 logstash 依然會從記錄過的 pos 開始讀取數(shù)據(jù)刨裆。所以重復(fù)測試的時候每回需要刪除 sincedb 文件。
2. 通過TCP套接字讀取事件彬檀。
input {
tcp {
host =>127.0.0.1
port => 8999
mode => "server"
ssl_enable => false
type => "guoan3"
codec => json { charset => "GBK" }
}
}
可以接受來自客戶端的連接或連接到服務(wù)器帆啃,具體取決于mode。
編輯
mode
值可以是任何的:server窍帝,client
默認(rèn)值為 "server"
操作模式努潘。server監(jiān)聽客戶端連接, client連接到服務(wù)器。
ssl_enable => false
啟用SSL(必須設(shè)置其他ssl_選項才能生效)
host:
值類型是字符串
默認(rèn)值為 "0.0.0.0"
當(dāng)模式是server疯坤,地址要監(jiān)聽报慕。當(dāng)模式是client,連接到的地址
然后 需要在SpringBoot項目中加入 相應(yīng)的依賴:
日志配置文件(不是SpringBoot也可以):
利用本模式進(jìn)行數(shù)據(jù)的導(dǎo)入需要在springboot 配置文件中加入
server:
context-path: /agenthouseCutomer
port:8084
max-http-header-size: 10024
3. 利用logstash的 logstash-input-jdbc進(jìn)行與mysql數(shù)據(jù)的同步
進(jìn)入logstash的bin目錄下安裝插件
Logstash-plugin install logstash-input-jdbc
Input配置
4. 關(guān)于filter的配置
4.1 grok filter
127.0.0.1 POST /logs/getLog 12345 0.123
grok { match => {“message”=>“%{IP:client}%{WORD:method}%{URIPATHPARAM:url}%{NUMBER:count}%{NUMBER:money}”} }
可以將骯臟的非結(jié)構(gòu)化日志數(shù)據(jù)解析成結(jié)構(gòu)化和可查詢的數(shù)據(jù)
Grok作為數(shù)據(jù)結(jié)構(gòu)化工具,在logstash中默認(rèn)上百個grok變量压怠,可以直接拿來使用
適合對syslog.apache log等可讀日志進(jìn)行分析
4.2 kv filter
對于諸如key-value 這種鍵值對數(shù)據(jù)進(jìn)行分析
如:user=國安1&url=111&method=main&ip=124.65.164.98&args=null
kv {
source => "message"
field_split => "&?"
}
解析出來格式
"method": "main",
ip": "124.65.164.98",
"message": "user=國安1&url=111&method=main&ip=124.65.164.98&args=null",
"url": "111",
"args": "null",
"user": "國安1"
4.3 geoip
geoip {
source => "ip"
fields => ["city_name", "country_code2", "country_name", "latitude", "longitude", "region_name"]
remove_field => ["[geoip][country_code3]", "[geoip][region_name]", "[geoip][continent_code]", "[geoip][timezone]", "[geoip][ip]"]
}
根據(jù)上面kv解析出來的ip字段進(jìn)行獲取詳細(xì)地理信息和經(jīng)緯度
響應(yīng):
"geoip": {
"city_name": "Beijing",
"latitude": 39.9289,
"country_code2": "CN",
"country_name": "China",
"longitude": 116.3883
},
5. 關(guān)于output配置
5.1 elasticsearch
elasticsearch {
hosts => "127.0.0.1:9200"
#index => "guoan88881234"
index => "guoerror-%{+YYYY.MM.dd}"
user => elastic
password => changeme
retry_on_conflict => 5
}
將logstash中數(shù)據(jù)輸入到elasticsearch中:
hosts:ip加端口號眠冈,或者域名
index:代表每天以guoerror-開頭生成索引
user:elasticsearch的用戶名
password:代表elasticsearch的密碼
retry_on_conflict:輸出重試次數(shù)
5.2 email
email {
port => "25" 端口
address => "smtp.126.com" 地址
username => "lsy4723@126.com"? 用戶
password => "*****" 客戶端授權(quán)密碼 適用于登錄以下服務(wù): POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)
authentication => "plain" 固定
use_tls => false
from => "lsy4723@126.com"
subject=> "Warning: 系統(tǒng)出錯了!%{@timestamp}-%{type}-%{logger_name}"
to => "lsy4723@163.com"
via => "smtp"
body => "%{stack_trace}"
? ? ? ? }
6. 啟動logstash
配置完成后windons下創(chuàng)建 run.bat
寫入logstash -f guoan.conf 啟動命令
或直接命令行l(wèi)ogstash -f guoan.conf啟動
-f 參數(shù)意思 ‘文件’
作用是指定logstash配置文件
-e 參數(shù)的作用為執(zhí)行? 如:logstash -e ‘input{stdin{}} output{stout{}}’
除此之外,還有 -t,-l,-w,-p,-v
啟動之前注意:
在config/logstash.yml中配置:
#pipeline管道線程數(shù)菌瘫,官方建議是等于CPU內(nèi)核數(shù)
pipeline.workers: 8
#pipeline管道實際output時的線程數(shù)蜗顽,一般小于或等于管道線程數(shù),建議等于cpu內(nèi)核數(shù)
pipeline.output.workers: 8
#單個工作線程在嘗試執(zhí)行過濾器和輸出之前收集的最大事件數(shù)突梦,默認(rèn)125; 數(shù)值越大羽利,處理則通常更高效宫患,但增加了內(nèi)存開銷; 某些硬件配置要求通過設(shè)置LS_HEAP_SIZE變量來增加JVM堆大小这弧,以避免使用此選項導(dǎo)致性能下降娃闲; 此參數(shù)的值超過最佳范圍會導(dǎo)致由于頻繁的垃圾回收或與內(nèi)存不足異常相關(guān)的JVM崩潰而導(dǎo)致性能下降; 調(diào)整pipeline.batch.size設(shè)置大小可調(diào)整發(fā)送到Elasticsearch的批量請求的大小
pipeline.batch.size: 3000
#此設(shè)置調(diào)整Logstash管道的延遲匾浪,默認(rèn)5皇帮; 流水線批處理延遲是Logstash在當(dāng)前管道工作線程中接收到事件后等待新消息的最大時間(毫秒); 在此時間過后蛋辈,Logstash開始執(zhí)行過濾器和輸出.Logstash在接收事件和在過濾器中處理該事件之間等待的最大時間是pipeline.batch.delay和pipeline.batch.size設(shè)置的乘積
pipeline.batch.delay: 100
四.Head 配置
1.在elasticsearch.yml配置跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"
2. 下載 elasticsearch-head
https://github.com/mobz/elasticsearch-head
3. Npm install
Npm run start
或者去google商店搜索ElasticSearch-head插件属拾,直接安裝即可使用
我得百度網(wǎng)盤:https://pan.baidu.com/s/1dkA1m9XECKSfpH65-qmE3Q
下載完之后加入谷歌擴(kuò)展程序即可使用
五.ElasticSearch優(yōu)化建議
1.調(diào)大系統(tǒng)的“最大打開文件數(shù)”,建議32k甚至64k
- ulimit -a (查看)
- ulimit -n 32000(設(shè)置)
2. 修改配置文件調(diào)整es的jvm內(nèi)存大小
修改bin/elasticsearch.in.sh中ES_MIN_MEM和ES_MAX_MEM的大小冷溶,建議設(shè)置一樣大渐白,避免平凡的分配內(nèi)存,根據(jù)服務(wù)器內(nèi)存大小配置逞频,一般分配60%左右(默認(rèn)256)
3.設(shè)置mlockall來鎖定進(jìn)程的物理內(nèi)存地址
- 避免交換(swapped)來提高性能
-修改文件 conf/elasticsearch.yml 中 bootstrap.mlockall:true
4.分片多的話可以提升建立索引的能力纯衍,5-20個比較合適,默認(rèn)5個
如果分片數(shù)過少或過多苗胀,都會導(dǎo)致檢索比較慢襟诸。分片數(shù)過多會導(dǎo)致檢索時打開比較多的文件,另外也會導(dǎo)致多臺服務(wù)器之間的通訊過慢基协。而分片數(shù)過少會導(dǎo)致單個分片索引過大歌亲,所以檢索速度會慢下來。建議單個分片最多儲存20G左右的索引數(shù)據(jù)澜驮,所以应结,分片數(shù)=數(shù)據(jù)總量/20G
5.副本多的話,可以提升搜索能力,但是如果設(shè)置很多副本的話也會對服務(wù)器造成額外的壓力鹅龄,因為需要同步數(shù)據(jù)揩慕,所以建議設(shè)置2-3個
PUT /gakj-1 { "settings": { "number_of_shards" : 5, "number_of_replicas" : 2 } }
6.定時優(yōu)化索引,segment越多扮休,查詢速度越差
max_num_segments=1
7.去掉mappings _all域迎卤,索引創(chuàng)建時默認(rèn)會有_all域,這樣會給查詢帶來方面玷坠,但是增加索引時間和索引尺度
- "_all":{"enabled":"false"}
8.log輸出的水平默認(rèn)為trace,即查詢超過500ms即為慢查詢蜗搔,就要打印日志,造成cpu和mem,io負(fù)載很高八堡,把log輸出水平改為info樟凄,可減輕服務(wù)器的壓力
-修改ES_HOME/conf/logging.yaml文件
-或修改ES_HOME/conf/elasticsearch.yaml
六.Elastic安裝x-pack
安裝:進(jìn)入elastic 的bin下
命令:elasticsearch-plugin install x-pack
安裝完成后啟動elasticsearch
初始化密碼:
bin/x-pack/setup-passwords auto
或者手動設(shè)置密碼:
bin/x-pack/setup-passwords interactive
注意:x-pack目前部分功能是收費(fèi)的,試用期是一個月兄渺,基礎(chǔ)版需要申請缝龄,基礎(chǔ)版免費(fèi)
七.ElasticSearch學(xué)習(xí)筆記及查詢語法
1.信息檢索與結(jié)果過濾
通過_source 返回指定的檢索字段集
2.kibana 中 sort排序不準(zhǔn)確的問題
3.match 檢索子句和_all參數(shù)的使用
匹配全部字段的檢索
4.match_phrase 在指定字段中匹配特定的檢索去
5.對于給定的內(nèi)容,query_string查詢使用查詢解析器來構(gòu)造實際的查詢
其中^2表示包含打開門鎖且其權(quán)重為2
6.prefix 找到某個字段以給定前綴開頭的文檔
7.range 范圍查詢
gte
大于或等于
gt
比...更棒
lte
小于或等于
lt
少于
8.more_like_this,fuzzy_like_this
查詢得到與所提供的文本相似的文檔
fields
like
9.multi_match 多字段中組合搜索
10.過濾查詢
查詢存在某個字段的日志
11.query_string 查詢
12.cat命令
1.GET /_cat
列出所有cat命令
2.GET /_cat/health?v
檢查集群健康狀況
3.GET /_cat/nodes?v
節(jié)點(diǎn)統(tǒng)計
4.GET /_cat/indices
獲取全部節(jié)點(diǎn)
13 設(shè)置最小節(jié)點(diǎn)挂谍,防止腦裂叔壤,避免兩個主節(jié)點(diǎn)同時存在一個集群中
discovery.zen.minimum_master_nodes: 2
通過api修改正在運(yùn)行的節(jié)點(diǎn),設(shè)置最小節(jié)點(diǎn)
PUT /_cluster/settings
{
? ? ? ? ? "persistent" : {
? ? ? ? ? ? ? ? "discovery.zen.minimum_master_nodes" : 2
? ? }
? ? ? ? }
14.集群恢復(fù)方面的配置
阻止 Elasticsearch 在存在至少 8 個節(jié)點(diǎn)(數(shù)據(jù)節(jié)點(diǎn)或者 master 節(jié)點(diǎn))之前進(jìn)行數(shù)據(jù)恢復(fù)
gateway.recover_after_nodes: 8
配置集群中應(yīng)該有多少節(jié)點(diǎn)口叙,以及我們愿意為這些節(jié)點(diǎn)等待多長時間
gateway.expected_nodes: 10? ? ? gateway.recover_after_time: 5m
設(shè)置單播節(jié)點(diǎn)列表炼绘,防止節(jié)點(diǎn)無意加入集群
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
防止同一個分片(shard)的主副本存在同一個物理機(jī)上
cluster.routing.allocation.same_shard.host: true
允許 JVM 鎖住內(nèi)存,禁止操作系統(tǒng)交換出去
bootstrap.mlockall: true
15.配置elasticsearch不要去配置垃圾回收和線程池
設(shè)置堆內(nèi)存
export ES_HEAP_SIZE=1g 或 ./bin/elasticsearch -Xmx1g -Xms1g
確保堆內(nèi)存最小值( Xms )與最大值( Xmx )的大小是相同的妄田,防止程序在運(yùn)行時改變堆內(nèi)存大小俺亮, 這是一個很耗系統(tǒng)資源的過程。
設(shè)置禁用內(nèi)存交換 或 降低swappiness 的值
sudo swapoff -a? ? vm.swappiness = 1
16.查詢某個字段必須包含什么疟呐,必須排除什么
17.es內(nèi)置REST接口
1./index/_search 搜索指定索引下的數(shù)據(jù)
2./_aliases? 獲取或操作索引的別名
3./index/type/? 創(chuàng)建或操作類型
4./index/_mapping 創(chuàng)建或操作mapping
5./index/_settings? 創(chuàng)建或操作設(shè)置(number_of_shards 是不可更改的)
6./index/_open 打開指定被關(guān)閉的索引
7./index/_close 關(guān)閉指定索引
8./index/refresh? 刷新索引(使新加內(nèi)容對索引可見铅辞,不保證數(shù)據(jù)被寫入磁盤)
9./index/_flush? 刷新索引(會觸發(fā)lucene提交)
18.term查詢指定的精確值
19.使用 constant_score 查詢以非評分模式來執(zhí)行 term 查詢并以一作為統(tǒng)一評分
內(nèi)部過濾器的操作:
1.查找匹配文檔
term查詢在倒排索引中查找包含該term的所有文檔,它描述了哪個文檔會包含該 term 萨醒。匹配文檔的標(biāo)志位是 1
2.創(chuàng)建bitset(一個包含0和1的數(shù)組)
3.迭代bitset(s)
一旦為每個查詢生成了 bitsets 斟珊,Elasticsearch 就會循環(huán)迭代 bitsets 從而找到滿足所 有過濾條件的匹配文檔的集合。執(zhí)行順序是啟發(fā)式的富纸,但一般來說先迭代稀疏的 bitset (因為它可以排除掉大量的文檔)
4.增量使用計數(shù)
Elasticsearch 能夠緩存非評分查詢從而獲取更快的訪
20.bool過濾器
must
所有的語句都 必須(must) 匹配囤踩,與 AND 等價。
must_not
所有的語句都 不能(must not) 匹配晓褪,與 NOT 等價堵漱。
should
至少有一個語句要匹配,與 OR 等價涣仿。
21.terms查找多個精確值
22.創(chuàng)建文檔索引
PUT /gakj
{
? "settings": {
? ? "number_of_shards": 5
? },
? "mappings": {
? ? "guoanjia":{
? ? ? "properties": {
? ? ? ? "id" :
? ? ? ? {
? ? ? ? ? "type" : "long",
? ? ? ? ? "store": true
? ? ? ? ?
? ? ? ? },?
? ? ? ? "url" :
? ? ? ? {
? ? ? ? ? "type" : "text",
? ? ? ? ? "index" :true,
? ? ? ? ? "omit_norms": "true",
? ? ? ? ? "store": true
? ? ? ? }
? ? ? }
? ? }
? }
}
23勤庐。創(chuàng)建索引時添加默認(rèn)過期時間
PUT my_index?
{?
? "mappings": {?
? ? "my_type": {?
? ? ? "_ttl": {?
? ? ? ? "enabled": true,?
? ? ? ? "default": "5m"?
? ? ? }?
? ? }?
? }?
}?
如果不添加ttl過期參數(shù)則文檔默認(rèn)不過期
? d
天
? ms(默認(rèn))
毫秒
m
分鐘
24.ik分詞器集成
https://github.com/medcl/elasticsearch-analysis-ik
下載后在elastic/plugins下創(chuàng)建ik文件夾示惊,將下載的解壓,然后根目錄下所有文件拷貝進(jìn)ik文件夾愉镰,重新啟動服務(wù)米罚,完成安裝
PUT /mytest
{
? "mappings": {
? ? "iktest":{
? ? ? ? "properties": {
? ? ? ? ? ? "content": {
? ? ? ? ? ? ? ? "type": "text",
? ? ? ? ? ? ? ? "analyzer": "ik_max_word",
? ? ? ? ? ? ? ? "search_analyzer": "ik_max_word"
? ? ? ? ? ? }
? ? ? ? }
? ? }
? }
}
GET /mytest/_analyze
{
? "text":"生活總是這樣,就像貓的花色遠(yuǎn)不只一種",
? "tokenizer": "ik_max_word"
}
GET /testik/ik/_search
{
? "query": {
? ? "match": {
? ? ? "content": "自首"
? ? }
? },
? "highlight" : {
? ? ? ? "pre_tags" : ["<tag1>", "<tag2>"],
? ? ? ? "post_tags" : ["</tag1>", "</tag2>"],
? ? ? ? "fields" : {
? ? ? ? ? ? "content" : {}
? ? ? ? }
? ? }
}
25.關(guān)于elastic預(yù)先定義文檔結(jié)構(gòu)后添入新字段會自動添加問題elastic給出明確的回答
PUT /my_index
{
? ? "mappings": {
? ? ? ? "my_type": {
? ? ? ? ? ? "dynamic":"strict",
? ? ? ? ? ? "properties": {
? ? ? ? ? ? ? ? "title":? { "type": "text"},
? ? ? ? ? ? ? ? "stash":? {
? ? ? ? ? ? ? ? ? ? "type":? ? "object",
? ? ? ? ? ? ? ? ? ? "dynamic":? true
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
默認(rèn)情況下丈探,當(dāng)在文檔中找到先前未見的字段時录择,Elasticsearch會將新字段添加到類型映射中。object 通過將dynamic參數(shù)設(shè)置為false(忽略新字段)或設(shè)置為strict(在遇到未知字段時拋出異常)碗降,可以在文檔和級別禁用此行為
Elastic+logstash+head簡單介紹
一. 概述
ElasticSearch是一個基于Lucene的搜索服務(wù)器隘竭。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口讼渊。
二.ElasticSearch的安裝與簡單配置
1.1. 應(yīng)該始終運(yùn)行最新版本的 Java 虛擬機(jī)( JVM )动看, 除非 Elasticsearch 網(wǎng)站上另有說明。? Elasticsearch爪幻, 特別是 Lucene菱皆,是一個高要求的軟件。Lucene 的單元測試和集成測試經(jīng)常暴露出 JVM 本身的 bug笔咽。這些 bug 的范圍從輕微的麻煩到嚴(yán)重段錯誤搔预,所以霹期,最好盡可能的使用最新版本的 JVM
1.2. 下載ElasticSearch
下載地址:https://www.elastic.co/downloads/elasticsearch
如下載最新版本請點(diǎn)TAR叶组,其他版本請點(diǎn)擊 past releases選擇
1.3.? 解壓安裝包
1.4. 目錄講解:
1. bin:包含運(yùn)行ElasticSearch實例和管理插件的一些腳本
2. Config: 主要是一些設(shè)置文件,如logging历造,elasticsearch.yml,jvm
3. Lib:包含相關(guān)的包文件等
4. Plugins:包含相關(guān)的插件文件等
5. Logs:日志文件
6. Data:數(shù)據(jù)存放地址
1.5. 零配置啟動
直接進(jìn)入bin目錄下甩十,啟動腳本elasticsearch
./elasticsearch
會顯示如下錯誤:
(1).java.lang.RuntimeException: can not run elasticsearch as root
這是由于elastic之前因為root超級權(quán)限下啟動引發(fā)過血案,所有強(qiáng)制不讓在root下啟動 吭产。解決方案:
添加elastic啟動用戶:
useradd syliu
passwd syliu
chown -R syliu:syliu elasticsearch-6.1.3
su syliu #
然后進(jìn)入bin目錄下啟動./elasticsearch
(2).max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
這是由于linux下最大打開文件數(shù)量比elastic要求的打開數(shù)量少
查看系統(tǒng)最大打開文件數(shù)量
- ulimit -a (查看)
- ulimit -n 65536(設(shè)置)
或者:
切換到root用戶修改
vim /etc/security/limits.conf
(3).max number of threads [3889] for user [syliu] is too low, increase to at least [4096]
vi /etc/security/limits.d/90-nproc.conf
vim /etc/security/limits.conf
(4).max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改/etc/sysctl.conf配置文件侣监,
cat /etc/sysctl.conf | grep vm.max_map_count
vm.max_map_count=262144
如果不存在則添加
echo "vm.max_map_count=262144" >>/etc/sysctl.conf
1.6. 到此,環(huán)境配置完成,重新啟動項目臣淤,項目啟動成功
訪問http://localhost:9200 后會顯示成功提示
(1) name:elastic實例名橄霉,設(shè)置可以在config/elasticsearch.yml中配置
(2) Version:版本號,以json格式表示的一組信息。
① Name: 當(dāng)前版本號
② build_snapshot:是否從源碼構(gòu)建而來
③ lucene_version:基于lucene的版本
1.7. 簡單配置elastic集群
1. cluster.name:集群名稱邑蒋。設(shè)置好以后會根據(jù)同一集群名字自動發(fā)現(xiàn)同一網(wǎng)段下的節(jié)點(diǎn)姓蜂,如果在同一網(wǎng)段下有多個集群,可以根據(jù)這個字段區(qū)分集群
2. Node.name:節(jié)點(diǎn)名稱医吊,可以自動生成節(jié)點(diǎn)名稱钱慢,這里配置是有利于利用api訪問具體的節(jié)點(diǎn),建議自己配置
3. Node.master:節(jié)點(diǎn)是否為master主節(jié)點(diǎn)-----每個節(jié)點(diǎn)都可被配置為主節(jié)點(diǎn)卿堂。默認(rèn)值為true束莫,目的是指定該節(jié)點(diǎn)是否有資格被選舉成為node懒棉。默認(rèn)集群中第一臺集群為master。如果這臺機(jī)器出現(xiàn)故障览绿,集群會自動重新選舉
4. Node.data:設(shè)置節(jié)點(diǎn)是否存儲數(shù)據(jù)策严,默認(rèn)為true,如果不希望存儲挟裂,則設(shè)置為false
客戶節(jié)點(diǎn)配置:
Node.master:true
Node.data:false
數(shù)據(jù)節(jié)點(diǎn)配置:
Node.master:false
Node.data:true
5. Network.host: 綁定監(jiān)聽IP,提供外界訪問
6. Transport.tcp.port:設(shè)置節(jié)點(diǎn)間交互的tcp端口
7. Discovery.zen.ping.unicast.hosts:設(shè)置集群中master節(jié)點(diǎn)的初始列表-通過這些節(jié)點(diǎn)來自動發(fā)現(xiàn)新加入的集群
8. discovery.zen.ping_timeout:設(shè)置集群中自動發(fā)現(xiàn)其他節(jié)點(diǎn)時ping連接超時時間-默認(rèn)為3秒享钞。對于比較差的網(wǎng)絡(luò)環(huán)境可以加大值來防止自動發(fā)現(xiàn)時出錯
9. client.transport.ping_timeout:客戶端連接ping的最大超時時間
10. bootstrap.memory_lock:true 鎖定內(nèi)存,防止內(nèi)存交換
11. http.port:綁定監(jiān)聽ip的端口號诀蓉,默認(rèn)9200
12. path.data:數(shù)據(jù)存放位置栗竖,最好不要放在默認(rèn)安裝目錄下,這樣卸載了會引起數(shù)據(jù)丟失渠啤,可以保存到不同的目錄下狐肢,最好掛載到不同的磁盤上
配置方法如下:path.data: /path/to/data1,/path/to/data2
啟動elastic會發(fā)現(xiàn)報錯:
memory locking requested for elasticsearch process but memory is not locked
解決辦法:
vim /etc/security/limits.conf
Syliu soft memlock unlimited
Syliu hard memlock unlimited
修改:
/etc/sysctl.conf
vm.swappiness=0
到此:配置完成,然后將本配置沥曹,將本配置拷貝到其他節(jié)點(diǎn)下份名,注意修改node.name.
如果配置在同一臺服務(wù)器下其他節(jié)點(diǎn)還需要修改端口號,以免端口被占用
三.Logstash的簡單配置與安裝
1.1? Logstash是一個能有效進(jìn)行日志處理的工具妓美,可以對日志進(jìn)行收集僵腺,分析。其本身并不產(chǎn)生日志壶栋,它只是一個內(nèi)置分析和轉(zhuǎn)換工具的日志管理工具辰如,是一個接收,處理,轉(zhuǎn)發(fā)日志的’管道’。
1.2 下載logstash
下載地址:https://www.elastic.co/downloads/logstash
下載壓縮包贵试,解壓
1.3 進(jìn)入bin目錄下創(chuàng)建.conf文件作為啟動文件
Logstash處理事件有三個階段:輸入Inputs,過濾Filters,輸出OutPuts
具體參閱:http://udn.yyuap.com/doc/logstash-best-practice-cn/input/stdin.html 或者h(yuǎn)ttps://www.elastic.co/guide/en/logstash/current/input-plugins.html
1.指定file為讀取文件的方式:
input {
file {
type => "guoan"
path => "F:/logs/guoanjia/guoanjia/*.log"
codec => json { charset => "GBK" }
start_position => "beginning"
}
}
type: 標(biāo)記事件類型? 集成java的時候需要用到琉兜。還可以根據(jù)type值做一些過濾的操作
path:為某個絕對路徑文件夾下所有以.log結(jié)尾的文件為數(shù)據(jù)源
codec: 編碼插件: codec 就是用來 decode、encode 事件的
指定輸入到logstash的格式為json格式的毙玻,指定字符集為中文
start_position:從什么位置開始讀取文件數(shù)據(jù)豌蟋,默認(rèn)是結(jié)束位置
把這個設(shè)定改成 "beginning",logstash 進(jìn)程就從頭開始讀取
除此之外還有一些配置有時候需要手動配上:
discover_interval:logstash 每隔多久去檢查一次被監(jiān)聽的 path 下是否有新文件桑滩。默認(rèn)值是 15 秒
exclude:不想被監(jiān)聽的文件可以排除出去
stat_interval:logstash 每隔多久檢查一次被監(jiān)聽文件狀態(tài)(是否有更新)梧疲,默認(rèn)是 1 秒
******注意:start_position 僅在該文件從未被監(jiān)聽過的時候起作用。如果 sincedb 文件中已經(jīng)有這個文件的 inode 記錄了运准,那么 logstash 依然會從記錄過的 pos 開始讀取數(shù)據(jù)幌氮。所以重復(fù)測試的時候每回需要刪除 sincedb 文件。
2. 通過TCP套接字讀取事件戳吝。
input {
tcp {
host =>127.0.0.1
port => 8999
mode => "server"
ssl_enable => false
type => "guoan3"
codec => json { charset => "GBK" }
}
}
可以接受來自客戶端的連接或連接到服務(wù)器浩销,具體取決于mode。
編輯
mode
值可以是任何的:server听哭,client
默認(rèn)值為 "server"
操作模式慢洋。server監(jiān)聽客戶端連接塘雳, client連接到服務(wù)器。
ssl_enable => false
啟用SSL(必須設(shè)置其他ssl_選項才能生效)
host:
值類型是字符串
默認(rèn)值為 "0.0.0.0"
當(dāng)模式是server普筹,地址要監(jiān)聽败明。當(dāng)模式是client,連接到的地址
然后 需要在SpringBoot項目中加入 相應(yīng)的依賴:
日志配置文件(不是SpringBoot也可以):
利用本模式進(jìn)行數(shù)據(jù)的導(dǎo)入需要在springboot 配置文件中加入
server:
context-path: /agenthouseCutomer
port:8084
max-http-header-size: 10024
3. 利用logstash的 logstash-input-jdbc進(jìn)行與mysql數(shù)據(jù)的同步
進(jìn)入logstash的bin目錄下安裝插件
Logstash-plugin install logstash-input-jdbc
Input配置
4. 關(guān)于filter的配置
4.1 grok filter
127.0.0.1 POST /logs/getLog 12345 0.123
grok { match => {“message”=>“%{IP:client}%{WORD:method}%{URIPATHPARAM:url}%{NUMBER:count}%{NUMBER:money}”} }
可以將骯臟的非結(jié)構(gòu)化日志數(shù)據(jù)解析成結(jié)構(gòu)化和可查詢的數(shù)據(jù)
Grok作為數(shù)據(jù)結(jié)構(gòu)化工具,在logstash中默認(rèn)上百個grok變量太防,可以直接拿來使用
適合對syslog.apache log等可讀日志進(jìn)行分析
4.2 kv filter
對于諸如key-value 這種鍵值對數(shù)據(jù)進(jìn)行分析
如:user=國安1&url=111&method=main&ip=124.65.164.98&args=null
kv {
source => "message"
field_split => "&?"
}
解析出來格式
"method": "main",
ip": "124.65.164.98",
"message": "user=國安1&url=111&method=main&ip=124.65.164.98&args=null",
"url": "111",
"args": "null",
"user": "國安1"
4.3 geoip
geoip {
source => "ip"
fields => ["city_name", "country_code2", "country_name", "latitude", "longitude", "region_name"]
remove_field => ["[geoip][country_code3]", "[geoip][region_name]", "[geoip][continent_code]", "[geoip][timezone]", "[geoip][ip]"]
}
根據(jù)上面kv解析出來的ip字段進(jìn)行獲取詳細(xì)地理信息和經(jīng)緯度
響應(yīng):
"geoip": {
"city_name": "Beijing",
"latitude": 39.9289,
"country_code2": "CN",
"country_name": "China",
"longitude": 116.3883
},
5. 關(guān)于output配置
5.1 elasticsearch
elasticsearch {
hosts => "127.0.0.1:9200"
#index => "guoan88881234"
index => "guoerror-%{+YYYY.MM.dd}"
user => elastic
password => changeme
retry_on_conflict => 5
}
將logstash中數(shù)據(jù)輸入到elasticsearch中:
hosts:ip加端口號妻顶,或者域名
index:代表每天以guoerror-開頭生成索引
user:elasticsearch的用戶名
password:代表elasticsearch的密碼
retry_on_conflict:輸出重試次數(shù)
5.2 email
email {
port => "25" 端口
address => "smtp.126.com" 地址
username => "lsy4723@126.com"? 用戶
password => "*****" 客戶端授權(quán)密碼 適用于登錄以下服務(wù): POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)
authentication => "plain" 固定
use_tls => false
from => "lsy4723@126.com"
subject=> "Warning: 系統(tǒng)出錯了!%{@timestamp}-%{type}-%{logger_name}"
to => "lsy4723@163.com"
via => "smtp"
body => "%{stack_trace}"
? ? ? ? }
6. 啟動logstash
配置完成后windons下創(chuàng)建 run.bat
寫入logstash -f guoan.conf 啟動命令
或直接命令行l(wèi)ogstash -f guoan.conf啟動
-f 參數(shù)意思 ‘文件’
作用是指定logstash配置文件
-e 參數(shù)的作用為執(zhí)行? 如:logstash -e ‘input{stdin{}} output{stout{}}’
除此之外,還有 -t,-l,-w,-p,-v
啟動之前注意:
在config/logstash.yml中配置:
#pipeline管道線程數(shù)蜒车,官方建議是等于CPU內(nèi)核數(shù)
pipeline.workers: 8
#pipeline管道實際output時的線程數(shù)讳嘱,一般小于或等于管道線程數(shù),建議等于cpu內(nèi)核數(shù)
pipeline.output.workers: 8
#單個工作線程在嘗試執(zhí)行過濾器和輸出之前收集的最大事件數(shù)酿愧,默認(rèn)125沥潭; 數(shù)值越大,處理則通常更高效嬉挡,但增加了內(nèi)存開銷钝鸽; 某些硬件配置要求通過設(shè)置LS_HEAP_SIZE變量來增加JVM堆大小,以避免使用此選項導(dǎo)致性能下降庞钢; 此參數(shù)的值超過最佳范圍會導(dǎo)致由于頻繁的垃圾回收或與內(nèi)存不足異常相關(guān)的JVM崩潰而導(dǎo)致性能下降拔恰; 調(diào)整pipeline.batch.size設(shè)置大小可調(diào)整發(fā)送到Elasticsearch的批量請求的大小
pipeline.batch.size: 3000
#此設(shè)置調(diào)整Logstash管道的延遲,默認(rèn)5基括; 流水線批處理延遲是Logstash在當(dāng)前管道工作線程中接收到事件后等待新消息的最大時間(毫秒)颜懊; 在此時間過后,Logstash開始執(zhí)行過濾器和輸出.Logstash在接收事件和在過濾器中處理該事件之間等待的最大時間是pipeline.batch.delay和pipeline.batch.size設(shè)置的乘積
pipeline.batch.delay: 100
四.Head 配置
1.在elasticsearch.yml配置跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"
2. 下載 elasticsearch-head
https://github.com/mobz/elasticsearch-head
3. Npm install
Npm run start
或者去google商店搜索ElasticSearch-head插件阱穗,直接安裝即可使用
我得百度網(wǎng)盤:https://pan.baidu.com/s/1dkA1m9XECKSfpH65-qmE3Q
下載完之后加入谷歌擴(kuò)展程序即可使用
五.ElasticSearch優(yōu)化建議
1.調(diào)大系統(tǒng)的“最大打開文件數(shù)”饭冬,建議32k甚至64k
- ulimit -a (查看)
- ulimit -n 32000(設(shè)置)
2. 修改配置文件調(diào)整es的jvm內(nèi)存大小
修改bin/elasticsearch.in.sh中ES_MIN_MEM和ES_MAX_MEM的大小使鹅,建議設(shè)置一樣大揪阶,避免平凡的分配內(nèi)存,根據(jù)服務(wù)器內(nèi)存大小配置瘤睹,一般分配60%左右(默認(rèn)256)
3.設(shè)置mlockall來鎖定進(jìn)程的物理內(nèi)存地址
- 避免交換(swapped)來提高性能
-修改文件 conf/elasticsearch.yml 中 bootstrap.mlockall:true
4.分片多的話可以提升建立索引的能力汗茄,5-20個比較合適悬包,默認(rèn)5個
如果分片數(shù)過少或過多,都會導(dǎo)致檢索比較慢冰沙。分片數(shù)過多會導(dǎo)致檢索時打開比較多的文件,另外也會導(dǎo)致多臺服務(wù)器之間的通訊過慢执虹。而分片數(shù)過少會導(dǎo)致單個分片索引過大拓挥,所以檢索速度會慢下來。建議單個分片最多儲存20G左右的索引數(shù)據(jù)袋励,所以侥啤,分片數(shù)=數(shù)據(jù)總量/20G
5.副本多的話当叭,可以提升搜索能力,但是如果設(shè)置很多副本的話也會對服務(wù)器造成額外的壓力盖灸,因為需要同步數(shù)據(jù)蚁鳖,所以建議設(shè)置2-3個
PUT /gakj-1 { "settings": { "number_of_shards" : 5, "number_of_replicas" : 2 } }
6.定時優(yōu)化索引,segment越多赁炎,查詢速度越差
max_num_segments=1
7.去掉mappings _all域醉箕,索引創(chuàng)建時默認(rèn)會有_all域,這樣會給查詢帶來方面徙垫,但是增加索引時間和索引尺度
- "_all":{"enabled":"false"}
8.log輸出的水平默認(rèn)為trace,即查詢超過500ms即為慢查詢讥裤,就要打印日志,造成cpu和mem,io負(fù)載很高姻报,把log輸出水平改為info坞琴,可減輕服務(wù)器的壓力
-修改ES_HOME/conf/logging.yaml文件
-或修改ES_HOME/conf/elasticsearch.yaml
六.Elastic安裝x-pack
安裝:進(jìn)入elastic 的bin下
命令:elasticsearch-plugin install x-pack
安裝完成后啟動elasticsearch
初始化密碼:
bin/x-pack/setup-passwords auto
或者手動設(shè)置密碼:
bin/x-pack/setup-passwords interactive
注意:x-pack目前部分功能是收費(fèi)的,試用期是一個月逗抑,基礎(chǔ)版需要申請剧辐,基礎(chǔ)版免費(fèi)
七.ElasticSearch學(xué)習(xí)筆記及查詢語法
1.信息檢索與結(jié)果過濾
通過_source 返回指定的檢索字段集
2.kibana 中 sort排序不準(zhǔn)確的問題
3.match 檢索子句和_all參數(shù)的使用
匹配全部字段的檢索
4.match_phrase 在指定字段中匹配特定的檢索去
5.對于給定的內(nèi)容,query_string查詢使用查詢解析器來構(gòu)造實際的查詢
其中^2表示包含打開門鎖且其權(quán)重為2
6.prefix 找到某個字段以給定前綴開頭的文檔
7.range 范圍查詢
gte
大于或等于
gt
比...更棒
lte
小于或等于
lt
少于
8.more_like_this,fuzzy_like_this
查詢得到與所提供的文本相似的文檔
fields
like
9.multi_match 多字段中組合搜索
10.過濾查詢
查詢存在某個字段的日志
11.query_string 查詢
12.cat命令
1.GET /_cat
列出所有cat命令
2.GET /_cat/health?v
檢查集群健康狀況
3.GET /_cat/nodes?v
節(jié)點(diǎn)統(tǒng)計
4.GET /_cat/indices
獲取全部節(jié)點(diǎn)
13 設(shè)置最小節(jié)點(diǎn)邮府,防止腦裂荧关,避免兩個主節(jié)點(diǎn)同時存在一個集群中
discovery.zen.minimum_master_nodes: 2
通過api修改正在運(yùn)行的節(jié)點(diǎn),設(shè)置最小節(jié)點(diǎn)
PUT /_cluster/settings
{
? ? ? ? ? "persistent" : {
? ? ? ? ? ? ? ? "discovery.zen.minimum_master_nodes" : 2
? ? }
? ? ? ? }
14.集群恢復(fù)方面的配置
阻止 Elasticsearch 在存在至少 8 個節(jié)點(diǎn)(數(shù)據(jù)節(jié)點(diǎn)或者 master 節(jié)點(diǎn))之前進(jìn)行數(shù)據(jù)恢復(fù)
gateway.recover_after_nodes: 8
配置集群中應(yīng)該有多少節(jié)點(diǎn)褂傀,以及我們愿意為這些節(jié)點(diǎn)等待多長時間
gateway.expected_nodes: 10? ? ? gateway.recover_after_time: 5m
設(shè)置單播節(jié)點(diǎn)列表忍啤,防止節(jié)點(diǎn)無意加入集群
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
防止同一個分片(shard)的主副本存在同一個物理機(jī)上
cluster.routing.allocation.same_shard.host: true
允許 JVM 鎖住內(nèi)存,禁止操作系統(tǒng)交換出去
bootstrap.mlockall: true
15.配置elasticsearch不要去配置垃圾回收和線程池
設(shè)置堆內(nèi)存
export ES_HEAP_SIZE=1g 或 ./bin/elasticsearch -Xmx1g -Xms1g
確保堆內(nèi)存最小值( Xms )與最大值( Xmx )的大小是相同的仙辟,防止程序在運(yùn)行時改變堆內(nèi)存大小同波, 這是一個很耗系統(tǒng)資源的過程。
設(shè)置禁用內(nèi)存交換 或 降低swappiness 的值
sudo swapoff -a? ? vm.swappiness = 1
16.查詢某個字段必須包含什么叠国,必須排除什么
17.es內(nèi)置REST接口
1./index/_search 搜索指定索引下的數(shù)據(jù)
2./_aliases? 獲取或操作索引的別名
3./index/type/? 創(chuàng)建或操作類型
4./index/_mapping 創(chuàng)建或操作mapping
5./index/_settings? 創(chuàng)建或操作設(shè)置(number_of_shards 是不可更改的)
6./index/_open 打開指定被關(guān)閉的索引
7./index/_close 關(guān)閉指定索引
8./index/refresh? 刷新索引(使新加內(nèi)容對索引可見未檩,不保證數(shù)據(jù)被寫入磁盤)
9./index/_flush? 刷新索引(會觸發(fā)lucene提交)
18.term查詢指定的精確值
19.使用 constant_score 查詢以非評分模式來執(zhí)行 term 查詢并以一作為統(tǒng)一評分
內(nèi)部過濾器的操作:
1.查找匹配文檔
term查詢在倒排索引中查找包含該term的所有文檔,它描述了哪個文檔會包含該 term 粟焊。匹配文檔的標(biāo)志位是 1
2.創(chuàng)建bitset(一個包含0和1的數(shù)組)
3.迭代bitset(s)
一旦為每個查詢生成了 bitsets 冤狡,Elasticsearch 就會循環(huán)迭代 bitsets 從而找到滿足所 有過濾條件的匹配文檔的集合。執(zhí)行順序是啟發(fā)式的项棠,但一般來說先迭代稀疏的 bitset (因為它可以排除掉大量的文檔)
4.增量使用計數(shù)
Elasticsearch 能夠緩存非評分查詢從而獲取更快的訪
20.bool過濾器
must
所有的語句都 必須(must) 匹配悲雳,與 AND 等價。
must_not
所有的語句都 不能(must not) 匹配香追,與 NOT 等價合瓢。
should
至少有一個語句要匹配,與 OR 等價透典。
21.terms查找多個精確值
22.創(chuàng)建文檔索引
PUT /gakj
{
? "settings": {
? ? "number_of_shards": 5
? },
? "mappings": {
? ? "guoanjia":{
? ? ? "properties": {
? ? ? ? "id" :
? ? ? ? {
? ? ? ? ? "type" : "long",
? ? ? ? ? "store": true
? ? ? ? ?
? ? ? ? },?
? ? ? ? "url" :
? ? ? ? {
? ? ? ? ? "type" : "text",
? ? ? ? ? "index" :true,
? ? ? ? ? "omit_norms": "true",
? ? ? ? ? "store": true
? ? ? ? }
? ? ? }
? ? }
? }
}
23晴楔。創(chuàng)建索引時添加默認(rèn)過期時間
PUT my_index?
{?
? "mappings": {?
? ? "my_type": {?
? ? ? "_ttl": {?
? ? ? ? "enabled": true,?
? ? ? ? "default": "5m"?
? ? ? }?
? ? }?
? }?
}?
如果不添加ttl過期參數(shù)則文檔默認(rèn)不過期
? d
天
? ms(默認(rèn))
毫秒
m
分鐘
24.ik分詞器集成
https://github.com/medcl/elasticsearch-analysis-ik
下載后在elastic/plugins下創(chuàng)建ik文件夾迁央,將下載的解壓,然后根目錄下所有文件拷貝進(jìn)ik文件夾滥崩,重新啟動服務(wù)岖圈,完成安裝
PUT /mytest
{
? "mappings": {
? ? "iktest":{
? ? ? ? "properties": {
? ? ? ? ? ? "content": {
? ? ? ? ? ? ? ? "type": "text",
? ? ? ? ? ? ? ? "analyzer": "ik_max_word",
? ? ? ? ? ? ? ? "search_analyzer": "ik_max_word"
? ? ? ? ? ? }
? ? ? ? }
? ? }
? }
}
GET /mytest/_analyze
{
? "text":"生活總是這樣,就像貓的花色遠(yuǎn)不只一種",
? "tokenizer": "ik_max_word"
}
GET /testik/ik/_search
{
? "query": {
? ? "match": {
? ? ? "content": "自首"
? ? }
? },
? "highlight" : {
? ? ? ? "pre_tags" : ["<tag1>", "<tag2>"],
? ? ? ? "post_tags" : ["</tag1>", "</tag2>"],
? ? ? ? "fields" : {
? ? ? ? ? ? "content" : {}
? ? ? ? }
? ? }
}
25.關(guān)于elastic預(yù)先定義文檔結(jié)構(gòu)后添入新字段會自動添加問題elastic給出明確的回答
PUT /my_index
{
? ? "mappings": {
? ? ? ? "my_type": {
? ? ? ? ? ? "dynamic":"strict",
? ? ? ? ? ? "properties": {
? ? ? ? ? ? ? ? "title":? { "type": "text"},
? ? ? ? ? ? ? ? "stash":? {
? ? ? ? ? ? ? ? ? ? "type":? ? "object",
? ? ? ? ? ? ? ? ? ? "dynamic":? true
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
默認(rèn)情況下钙皮,當(dāng)在文檔中找到先前未見的字段時蜂科,Elasticsearch會將新字段添加到類型映射中。object 通過將dynamic參數(shù)設(shè)置為false(忽略新字段)或設(shè)置為strict(在遇到未知字段時拋出異常)短条,可以在文檔和級別禁用此行為