接Elasticsearch讀書筆記(一)
靜態對映欄位型別
1、keyword。適用於索引結構化的欄位,例如姓名,電話號碼,電子郵箱,身份證等。通常用於過濾,排序,聚合,精確搜尋。
2、數字。Long,Integer等。
3、text。全文搜尋,例如文件內容,產品描述等。透過分詞器生成倒排索引。不用於排序,聚合。
4、date。內部儲存的是毫秒計時的長整型,配置的時候要設定格式化。
5、boolean。
6、binary。Base64編碼的字串,預設不儲存,不搜尋。
7、array。沒有專門的陣列型別。第一個值決定整個陣列的型別,內部型別必須一致。
8、object。文件內包含的子物件,但是寫入ES後會扁平化。
9、nested。因為文件內部的子物件會被扁平化,如果希望子物件也能被搜尋,就指定此型別。
10、geo_point。經緯度,用於查詢一定範圍內的地理位置。透過地理位置或相對中心點的距離聚合文件。把距離因素整合到文件評分中,透過距離對文件排序。
11、geo_shape。存一塊區域。
12、IP。
13、range。時間,年齡範圍。例如date_range、integer_range等。例如一個商品的保質期是從2020-01-01~2020-12-31,可以設定shelf_life:{type:date_range,format:yyyy-MM-dd}。商品資訊是:shelf_life:{gte:2020-01-01,lte:2020-12-31}
14、token_count。統計字串分詞後詞項的個數。
元欄位
_index。所屬索引。
_id。文件ID。
_source。文件正文的原始JSON。
_size。_source欄位大小。
_all。所有欄位拼接在一起的總欄位,空格分開。多用於有關鍵詞,但不指定關鍵詞屬於哪個具體欄位。
_field_names。儲存文件中包含非空欄位的名字,常用於exists查詢。
_routing。自定義路由值,預設是ID。
搜尋機制
1、輸入原始文件。
2、儲存原始文件,生成docID。
3、透過分詞過濾生成倒排索引。
4、使用者查詢,分詞後查詢倒排索引,定位文件集。
5、對文件集評分,排序,高亮處理後返回。
簡單查詢
term query。不分詞,精確匹配。
match query。分詞。
terms query。包含多個詞的文件。
range query。匹配範圍內的數值,日期,字串文件。gt>,gte>=,lt<,lte<=。
exists query。欄位中非空值的文件。
prefix query。欄位中給定字首開始的文件。
wildcard query。萬用字元查詢。
regexp query。正則表示式查詢
fuzzy query。錯詞白字的模糊查詢。
type query。查指定型別的文件。
ids query。指定ID集的文件。