Elastic+logstash+head簡單介紹

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(在遇到未知字段時拋出異常)短条,可以在文檔和級別禁用此行為

















?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末导匣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子茸时,更是在濱河造成了極大的恐慌贡定,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件可都,死亡現(xiàn)場離奇詭異缓待,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)渠牲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門旋炒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人签杈,你說我怎么就攤上這事瘫镇。” “怎么了答姥?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵铣除,是天一觀的道長。 經(jīng)常有香客問我鹦付,道長尚粘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任睁壁,我火速辦了婚禮背苦,結(jié)果婚禮上互捌,老公的妹妹穿的比我還像新娘潘明。我一直安慰自己,他們只是感情好秕噪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布钳降。 她就那樣靜靜地躺著,像睡著了一般腌巾。 火紅的嫁衣襯著肌膚如雪遂填。 梳的紋絲不亂的頭發(fā)上铲觉,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音吓坚,去河邊找鬼撵幽。 笑死,一個胖子當(dāng)著我的面吹牛礁击,可吹牛的內(nèi)容都是我干的盐杂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼哆窿,長吁一口氣:“原來是場噩夢啊……” “哼链烈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挚躯,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤强衡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后码荔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漩勤,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年缩搅,在試婚紗的時候發(fā)現(xiàn)自己被綠了锯七。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡誉己,死狀恐怖眉尸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巨双,我是刑警寧澤噪猾,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站筑累,受9級特大地震影響袱蜡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜慢宗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一坪蚁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧镜沽,春花似錦敏晤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春译打,著一層夾襖步出監(jiān)牢的瞬間耗拓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工奏司, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乔询,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓韵洋,卻偏偏與公主長得像哥谷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子麻献,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容