elasticsearch 與傳統的 sql資料庫的乙個明顯的不同點是,elasticsearch 是乙個非結構化的資料庫,或者說是乙個無模式的資料庫。elasticsearch 中資料最重要的三要素當屬:索引、型別、文件,其中索引這個概念非常重要,我們可以粗略地將其模擬到傳統sql資料庫中的資料表。本文就從 elasticsearch 的索引對映如何配置開始講起。
注:本文原載於my personal blog,歡迎光臨小站!建立索引時,可以自定義索引的結構,比如 建立乙個儲存使用者資訊資料的
users
索引,其典型的結構如下:為此我們可以建立乙個 json 格式的索引模式對映檔案:users.json
上面的 json**意義如下:,
"name" : ,
"birthday" : ,
"hobby" : }}
}}
然後我們來執行如下命令來新建乙個索引:
結果如下,索引curl -x
put -d @users.json
users
、型別user
、以及 四個字段 都已經順利插入:關於欄位的可選型別,有如下幾種:關於每種型別有哪些屬性,可參考官方文件,由於內容太多,此處不再贅述。分析器是一種用於分析資料或者按照使用者想要的方式處理資料的工具,對於字串型別的字段,elasticsearch 允許使用者自定義分析器。
上述 json**中,使用者定義了乙個名為myanalyzer的分析器,該分析器包含乙個分詞器 + 三個過濾器,分別如下:},
"filter" : }}}
},"user" : ,
"name" : ,
"birthday" : ,
"hobby" : }}
}}
分詞器:
standard
過濾器:asciifolding
過濾器:lowercase
過濾器:myfilter
(自定義過濾器,其本質是kstem
)可以通過類似如下的 restful介面來測試 analyze api 的工作情況:
可見我們輸入的時一行字串普通curl -x get '/_analyze?field=user.name'
-d'cars trains'
"cars trains"
,而輸出為:car
和train
,這說明短語"cars trains"
被分成了兩個詞條,然後全部轉為小寫,最後做了詞幹提取的操作,由此證明我們上面自定義的分析器已然生效了!elasticsearch 允許為索引模式對映檔案中的不同字段指定不同的相似度得分計算模型,其用法例析如下:
"user" : ,
"name" : ,
"birthday" : ,
"hobby" : }}
}
上述 json檔案中,我們為elasticsearch 支援為每個字段指定資訊格式,以滿足通過改變欄位被索引的方式來提高效能的條件。elasticsearch 中的資訊格式有如下幾個:name
字段使用了bm25
這種相似度模型,新增的方法是使用similarity
屬性的鍵值對,這樣一來 elasticsearch 將會為name
字段使用bm25
相似度計算模型來計算相似得分。資訊格式字段(
postings_format
)可以在任何乙個欄位上進行設定,配置資訊格式的示例如下:"user" : ,
"name" : ,
"birthday" : ,
"hobby" : }}
}
在該例子之中,我們手動配置改變了文件值 這個字段屬性作用在於:其允許將給定欄位的值被寫入乙個更高記憶體效率的結構,以便進行更加高效的排序和搜尋。我們通常可以將該屬性加在需要進行排序的字段上,這樣可以提效。id
欄位的資訊格式為pulsing
,因此可加快該字段的查詢速度。其配置方式是 通過屬性
doc_values_format
進行,有三種常用的doc_values_format
屬性值,其含義從名字中也能猜個大概:舉個栗子吧:
"user" : ,
"name" : ,
"birthday" : ,
"hobby" : ,
"age" : }}
}
上述 json配置中,我們給型別user
新增了乙個age
字段,假如我們想對年齡字段進行排序,那麼給該字段設定文件值格式的屬性是可以提公升效率的。由於能力有限,若有錯誤或者不當之處,還請大家批評指正,一起學習交流!可長按或掃瞄下面的小心心來訂閱codesheep,獲取更多務實、能看懂、可復現的原創文 ↓↓↓Elasticsearch索引建議
背景 最近在做日誌收集,用到elasticsearch作為儲存層,因為日誌量比較大,一天近2t,所以每時每刻都會有大量的插入操作。又由於是給開發人員查日誌使用,所以查詢的量比較小。受限於儲存空間,目前僅保留7天的日誌,多數為乙個業務模組乙個索引,按天切分索引。關於索引和型別的取捨,建立多個索引還是乙...
elasticsearch 建立索引
介紹 分詞器 analyzer 包括乙個分解器 tokenizer 和多個詞元過濾器 filter 詞元過濾器的作是對分詞器提取的詞元進一步處理,比如轉成小寫,使用edge ngram,同義詞等,處理之後成為索引詞 term 文件正包含了幾個這樣的term成為frequency 詞頻 分解器 tok...
Elasticsearch 索引例項
elasticsearch包含了一系列的感念,比如索引 indexing 搜尋 search 以及聚合 aggregations 現在我們主要介紹indexing。在elasticsearch中,文件歸屬於一種型別 type 而這些型別存在於索引 index 中,我們可以畫一些簡單的對比圖來模擬傳統...