ES 學習總結


ES 總結:

es 是基於lucene的, 是java 實現的, 很多概念和lucene是相同的

索引—— 對應數據庫的表,mongoDB中的集合

文檔,由字段組成, 一個字段可以出現多次。

字段,其類型可以是任意的, 也可以是復合的, 注: 不同類型的同名字段不能設置為不同類型。

分片:每個分片是一個獨立的lucene實例, 一個獨立的jvm, 一個索引的數據可以有多個 分片組成———— 數據量大的時候, 通常都是這樣的, 而且每個分片都是位於集群不同的節點上。
分片的大小是不能控制的, 但是分片數量是可以控制的

副本:或者說副本分片, 他是對原始分片的精確拷貝, 原始分片稱為主分片。 它是相對分片的一個概念。 通常,我們對索引的所有操作都是直接作用在主分片上, 然后, es 會將操作同步到副本上去。
主分片不可用了(如對應節點down 掉) 副本會被提升為 主分片。 主分片和其副本是位於不同 節點上的, 這個是必須的, 否則副本不會被分配下去。 因為同一個節點上同時分配主分片/副本是無意義的。 機制決定的。

配置:
rack 表示機架
ip默認是localhost, 只能本機訪問, 需要改為具體ip, 以便局域網內其他機器可用訪問。
默認端口是 9200, 如果默認端口不可用, 則會自動綁定下一個端口..?

put 和post 的區別, put 可用創建一個不存在的索引, 類型, 或者同時, post 操作時候, 可以創建索引, 但不能同時創建索引/類型, id 也需要指定。。

post 更新文檔: 需要先從_source 獲取數據, 移除舊文檔,應用變更,作為一個新文檔創建。 ?? 這么復雜/麻煩?
———— 如果沒有啟用 _source 字段, 怎么辦?

REST 通過請求頭的動詞操作, 但是有時候我們需要其他輔助:

_create 指明是創建操作
_update 指明是更新
_search 指明是 search API,

_id 指明id 字段
_type:指明type 獲取方式

_all 一個復制了所有其他屬性內容的 字段,默認開啟, 用於:
_version
_size _source字段原始的
_index 默認禁用 文檔被索引到那個 索引文件的信息

_boost
_timestamp 默認禁用,不會存儲/索引
_ttl

_shards

upsert 

...

URL 的 參數:

pretty 適用於GET操作
routing

映射:

設置字段的類型,存儲方式:

如:
PUT /lfs_files
{
"mappings": {
"my_file" : {
"_id": {
"path": "id"
},
"dynamic": "strict",
"date_detection": false
"properties" : {
"id" : {
"type" : "long",
"index": "not_analyzed"
},
"userId" : {
"type" : "long",
"index": "not_analyzed"
...
}
}
}
}

index_name, 可不寫,默認為字段名。

index 可以為analyzed 或no , 默認analyzed
或對字符串類型字段 可以是 not_analyzed , 表示只會, 整個存儲起來, 但是不會被分析(就是不會被空格處理/大小寫/特殊字符過濾等等之類的), 只有完全匹配的搜索才能查到該字段

store yes/no, 默認no, 指定是否存儲字段原始值。。

boost 權重, 評分用的, 一般用於結果的排序, 過濾

null_value : 索引時候, 不存在時, 寫入的默認值, 如果沒有默認行為是忽略。

include_in_all , 是否被包含到 _all 字段中,

_source 字段: 它到底是什么東西?

字符串型:
特有屬性:

term_vector: —— 高亮時需要
omit_norms:
index_options:
analyzer: 泛指index_analyzer,search_analyzer, 默認是全局定義的分析器
index_analyzer: 用於索引時
search_analyzer:用於搜索時

ignore_above: 字段的最大長度

數值型:string

precision_step: range 查詢時候有用
ignore_malformed:

日期:date
format:
precision_step
ignore_malformed

布爾型: boolean

二進制: binary
只支持 index_name 屬性

multi_field:
fields : {}
...

內置分析器:

自定義分析器:
{
settings:{
index: {
analysis: {
analyzer:{
自定義分析器名稱:{
tokenizer: xxx 如standard
filter: [
lowercase,
asciifolding,
自定義過濾器名
]
}
}
},
filter:{
自定義過濾器名:{
type: kstemxxx
}
}
}
}

mappings:
	類型名:
		_analyzer: {
			path: xxx  ———— 指明分析器名為 path 對應的字段的那個值, 用於動態設置。。
		}
		_source: {
			enabled : false 	+++++ false 或者true, 表明是否存儲文檔源,  ———— 具體表明了??
		}
		_all: {
			enabled : false 	+++++ false 或者true, 表明是否在_all 字段包含所有文本字段的取值。。  false 表示禁用。 它會自動索引大小, 不需要的時候, 最好禁用。
		}
		
		
		// 動態映射, 即不具體制定字段類型的時候, 只能靠es來猜了, 那么, 具體如何猜呢? 它會先參考 動態映射。 當然,如果沒有動態映射, 那么就使用默認的機制猜測。
		numeric_detection: true/ false
		dynamic_date_formats: [yyyy-MM-dd hh:mm  ]  是一個數組
		
		//
		dynamic: false  禁用自動生成映射, 同時禁止自動添加新字段。 默認 true
		
		dynamic_templates: [
			template名: {
				match: "*"
				//unmatch: ""
				mapping: {
					type: multi_field,
					fields :{
						{name}: { type: dynamic_type},
						str: { type: string}
					}
				}
			}
		]
		
		_routing: {
			xxx
		}
		properties: {
			xx
		}
	}
}

}

//模板
{
template: "*"
order: 1,
settings: {
index.number_of_replicas: 0
}
mappings:{
default: {
_source: {
enabled: false
}
}
}
}

動態模板:
xxx

路由:
routing 參數
_routing 字段:
_routing: {
requered: true,
path:userId
}

es 全部可用的過濾器類型列表:
官網。。。

默認分析器: 索引時候, 未指明分析器,那么使用這個。
{
settings:{
index: {
analysis: {
analyzer:{
default:{ --- 使用 default 關鍵字即可
tokenizer: xxx 如standard
filter: [
lowercase,
asciifolding,
自定義過濾器名
]
}
}
},
filter:{
自定義過濾器名:{
type: kstemxxx
}
}
}
}
}

別名:

_aliases 參數

搜索數據:
查詢/索引的過程:
索引過程:

搜索過程:

分析過程: 預備字段內容,將其轉換為詞項(term)的過程, 索引時, 內容 被拆分為 詞條流。 —— 詞項是帶有輸入位置等額外信息的詞條。詞條:單詞
詞條化:tokenizer ?
過濾: filter?

分析器: 帶有0或多個過濾器的分詞器。

================================================================================================================================================

查詢:

url 查詢

DSL

分頁

返回版本號
{
version: true
...
}

限制結果分數:
min_score

指定返回字段:

fields : [ xxx, yyy], 如果沒有指定,你們使用默認的 _source, * 表示所有存儲的字段

partial_fields:
script_fields:
自定義字段名
script:xxx

搜索類型:

query_and_fetch
。。
count
scan&scroll
dfs_xx

指定搜索執行的位置:
_primary
_local
..

查詢類型:
term 查詢:
terms 查詢:
match
match_phrase
match_phrase_prefix
match_all
multi_match
query_string
field 對query_string 的簡化
ids
prefix
fuzzy
wildcard
mlt
range

查詢重寫:
rewrite

過濾查詢結果:

使用過濾器 先查詢,再過濾
{
query xxx
filter xxx
}

filtered 先過濾,再查詢(效率更高)

{
query
filtered
query
field —— 這個是什么查詢類型
filter
term —— term查詢
}

過濾器有哪些:

range
term
exists
missing
script
type 用於查詢多個索引, 很多文檔類型的時候, 用於過濾,限制文檔類型
limit 限制每個分片的返回的文檔數目
ids
bool and or not

過濾器的別名

過濾器的緩存:

復合查詢:
bool 組合
boosting 組合
positive
negative
negative_boost
constant_score

indices 在多個索引上進行查詢, 封裝一個 索引的數值, 兩個查詢
indices
indices []
query
no_match_query

custom_fileters_score 封裝一個查詢, 若干過濾器
custom_boost_factor
custom_score 通過腳本為另一個查詢定制分值

排序:
默認排序: score
sort
指定確實字段的行為
動態標准
sort
_script
script

2.8 使用腳本

script
lang 默認mvel
params 腳本參數

使用方法:
_script
script 腳本內容或者 腳本文件名
lang 默認為 mvel
params 參數

腳本中可用的對象:
doc 也可以是 _doc doc['xxx'].value 方式訪問 處理(分析)后的文檔
_source _source.xxx.value 方式訪問 原始字段值
_fields _fields.xxx.value 方式訪問 ?

結果分析:

took
timed_out
hits {
total
max_score
hits: [
_index
_type
_id
_version
_source : {
xxx
}
]
}

================================================================================================================================================

================================================================================================================================================ 插件

插件

JavaScript 語言插件

處理文件插件:

elasticsearch/elasticsearch-mapper-attachments

bigdesk

lukas-vlcek/bigdesk

head
mobz/elasticsearch-head

paramedic

SPM

================================================================================================================================================ 非平面數據

非平面數據

對象 obj: {
type : object,
properties : {
attr1: {
type : xxx
xxx
}
...
}
}
數組 arr: {
properties : {
element1: {
type : xxx
xxx
}
...

		}
	}

================================================================================================================================================ 高亮:

高亮:

需要字段原始值: 字段要么 store = yes, 如果是no, 那么 _source 應該是可用的, 否則, 無法高亮。。。

實現:
1 標准實現
2 依賴於term向量

es 會自動選擇

html 標簽:

{
highlight
pre_tags: [ ]
post_tags: [
]
fields
requered_field_match

	number_of_fragements
	fragment_size

}

================================================================================================================================================

自動補全

autocomplete

edgeNGram

統計/切面 faceting facet

================================================================================================================================================
================================================================================================================================================ 優化
分析:
_analyze?analyzer=xxx 指定分析器進行分析, 沒有analyzer 則使用默認的分析器
_analyze?tokenizer=xxx&filters=xx,yy

解釋查詢
_explain 查詢參數

================================================================================================================================================
================================================================================================================================================ 同義詞

{
settings:{
index: {
analysis: {
analyzer:{
synonym分析器: {
tokenizer
filter: [
synonym名
]
}
}
},
filter:{
synonym名:{
type: synonym
ignore_case: true
synonyms: [
jump => leap
...
]
}
}
}

可見,synonym 就是一個分析器, 但是他的 過濾器的類型是 synonym

synonym_path 可以代替synonyms, 表示一個文件

使用 solr 的同義詞

同義詞等價定義

擴展

使用WordNet 同義詞

================================================================================================================================================
================================================================================================================================================ span 查詢

span_term
span_first
span_near
span_not
span_or

================================================================================================================================================
================================================================================================================================================ 組合索引

variation API

索引樹性結構

url 參數:
parent
child

字段:
_parent
_child

has_child
has_parent

嵌套對象

================================================================================================================================================
================================================================================================================================================ river

mongodb 插件

================================================================================================================================================
================================================================================================================================================ 網關

================================================================================================================================================
================================================================================================================================================ 批量操作
_bulk url 參數

{
create:
update:
delete:
index:
...

}

UDP 批量操作:

批量取

_mget

批量查詢
_msearch

================================================================================================================================================
================================================================================================================================================ 統計/切面
統計/切面 是針對 一個或多個索引的, 多個類型? 一個類型? 反正一個文檔, 肯定是不行的, 數據量太少, 怎么統計, 毫無意義啊

query 統計
得到匹配查詢的結果數目

filter 統計
得到匹配查詢的結果數目

terms 統計
返回指定字段中使用最多的詞項

range 統計
返回某個范圍的 結果數目

它會繼續 min max mean count total 等值

histogram 統計
對字段取值按間隔 統計, 建立直方圖 , 只對 數字/ 日期型 字段中,

間隔: 通過 interval 控制

date_histogram 統計

statistical 統計
min max mean 平方和 總和 方差 標准差 等等

terms_stats 統計
綜合了 terms/ statistical 統計

geo_distance 統計

過來統計結果:

facet_filter

統計計算范圍:

scope

nested

================================================================================================================================================
================================================================================================================================================ 相似文檔
_mlt 查詢參數

min_doc_freq
min_term_freq
...

================================================================================================================================================
================================================================================================================================================ 反查 percolator
_percolator 查詢參數

感覺好奇怪,

對文檔進行反查?

0 准備,假設存在一個 notifier 的索引,
其中存在類型:
數據:

1 先向 名為_percolator 的索引中, 注冊一個查詢, 也就是往 _percolator 的索引存入一個文檔。 這個是一個普通的put

put _percolator/notifier/id {
query: { xxx } --- 這個字段是必須的, 反查嘛。。
自定義的字段。。。
}

2 用戶對notifier 進行查詢 等操作 —— 這個過程是用戶端發生的

3 進行反查, 也就是對剛才的notifier的索引的 x/_percolator 部分。 這個是一個特殊的查詢了
特殊的是, 需要一個x 查詢參數 , why ??

GET notifier/x/_percolator
{
doc:{
notifier 的一個文檔內容 documentX
}
query: {
查詢條件 Q
}
}

這個意思是說,

用戶進行了很多對notifier 的查詢, 那么, 他們是否有人曾經查詢過documentX呢, 以 Q 的方式, 換句話說, 是否有人以Q 方式使用特定的這 documentX 呢

================================================================================================================================================
================================================================================================================================================ 節點探索 discovery

zen directory

================================================================================================================================================
================================================================================================================================================ 管理集群

_stats 查詢參數 進行 統計

docs 統計信息
store 統計信息
indexing
get
search

_cluster

主節點:

node.master

node.data

discovery.zen.minimum_master_nodes 最小集群節點數

================================================================================================================================================
================================================================================================================================================ 端點

_validate/query 驗證

_cluster
nodes
state

_status
_nodes

索引分段

_segements

控制分片 副本

node.zone

移動分片 reroute

post _cluster/reroute

{
commands: {
{
move : {
from
to
..

		}
		
		allocate
	}
}

}

================================================================================================================================================
================================================================================================================================================ url 參數

================================================================================================================================================ 滾動

如何操作:
1 先建立scroll 查詢, 獲取 scroll_id

字段: _scroll_id

url 查詢參數 scroll_id

2 然后使用 scroll_id

3 ...

================================================================================================================================================ 特殊字段

================================================================================================================================================ 再平衡 rebalancing

================================================================================================================================================ 預熱

_warmer

warm_facet


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM