ElasticSearch Basic Memo
這篇紀錄ElasticSearch Basic Memo。
Memo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| elastic.co
./bin/elasticsearch -E xpack.security.enabled=false
./bin/elasticsearch -d
./bin/kibana &
DSL domain specific language
query (沒有cache) versus filter (有cache)
bool query support must(必須滿足) & term filter(比對)
query term === sql where條件
indexing => 將句子裡的單字拆解成各個token並轉小寫
_type(舊版) -> _doc(新版)
8.0版 不支援 */_doc/_mapping
elasticsearch 的 _mapping 不允許破壞性更新
default 1.type 是給 text 2.fields keyword type : keyword 因兩種indexing都做,所以佔用的disk部分會較多
"fields": { "original": {"type": "keyword"} } 允許擴充
*設計mapping再做document indexing
neal real-time 近乎即時 equal Non real-time
Apache Lucene 做全文檢索的open source
Term 進行搜尋時的最小單位
Master node可參與選舉 Voting node 只能參與投票
一台機器有500 shard versus 五台機器各有100個shard
一個shard大小不要超過50GB (非絕對) why? 考慮Cluster規模 及 資料大小
GET API is real-time,search is neal real-time
mapping stored_fields
Update不是真的更新 是將舊文件刪除 重新indexing (delete + add)
_seq_no 是 該index中只要有異動給的流水號
_primary_term : primary_shard 有改變就會+1
"_source":{"enabled":false} 不儲存在_source 但還是查的到_id
Bulk API use NDJSON(newline-delimited JSON) 一行一個JSON object 先從1000~5000 documents/request 5MB~15MB開始測量
"_shards": { "total": 2, "successful": 2, "skipped": 0, "failed": 0 }
_search bool must + filter
from + size 不能超過 index.max_result_window (10000筆)
ElasticSearch Sort很耗記憶體
不要讓使用者直接存取index 而是讓使用者存取alias
Global Priority Queue 會拿回 (from + size) * Local Priority Queue數量
Deep pagination 1.Scroll API 建立snapshot 2.Search after
"apple" "apple a" "apple b" 放在不同shard的score會相同
Elasticsearch Persistence
ElasticSearch Day2
edge-ngram used by autocomplete & auto-suggestion
range query : 適用數值 & 日期條件
terms query 等於 RDB IN的語法
fuzzy 查詢建議使用其它查詢來代替 因效能不佳!
Nested Term Aggregation
doc_values : false 節省硬碟空間
|