平湖網(wǎng)站建設公司克河北網(wǎng)站seo地址
文章目錄
- Elasticsearch快速入門
- 核心概念
- 倒排索引
- 基本使用
- 索引操作
- 創(chuàng)建索引
- 類型映射[了解]
- 數(shù)據(jù)類型[了解]
- 查看索引
- 刪除索引
- 文檔操作
- 添加文檔
- 修改文檔
- 刪除文檔
- 查詢文檔
- 準備數(shù)據(jù)
- 主鍵查詢
- 精確查詢
- 匹配查詢
Elasticsearch快速入門
核心概念
Elasticsearch是面向文檔的,以json格式存儲數(shù)據(jù)的NoSQL數(shù)據(jù)庫,也是一個全文搜索引擎。
Elasticsearch | 關系型數(shù)據(jù)庫(如Mysql) |
---|---|
索引(Index) | 數(shù)據(jù)庫(Database) |
類型(Type) | 表(Table) |
文檔(Document) | 行,記錄(Row,Record) |
字段(Field) | 列,字段(Column,Field) |
映射(Mapping) | 約束(Schema) |
注意:es中的類型在es7.x版本中已經(jīng)沒有,在后面的8.x版本中被徹底刪除掉。
倒排索引
倒排索引(Inverted Index),是Elasticsearch中的索引工作機制。倒排索引是區(qū)別于正排索引的概念:
- 正排索引:是以文檔對象的唯一ID作為索引,以文檔內(nèi)容作為記錄。
- 倒排索引:指的是將文檔內(nèi)容中的單詞作為索引,將包含該詞的文檔ID作為記錄。
Elasticsearch的工作流程如下,因為使用倒排索引產(chǎn)生的文檔記錄要比mysql數(shù)據(jù)行少多了,所以會比較快。
基本使用
es提供了retfulAPI風格操作接口給開發(fā)者對索引、類型、文檔、字段、映射等進行增刪查改操作。
索引操作
創(chuàng)建索引
請求格式:
PUT /索引名稱
類型映射[了解]
相當于在mysql中創(chuàng)建數(shù)據(jù)表時的字段類型
# 索引名稱必須已經(jīng)存在!
POST /索引名稱/類型名稱
{"類型名稱": { // 映射的類型名稱"properties": { // 索引中文檔的屬性"字段名": { // 屬性名或字段名"type": "text" // 屬性值類型或字段類型,text表示文本,如商品標題"index": "analyzed", // 索引類型"analyzer": "ik_smart" // 設置使用的分詞器[標準分詞]},"字段名": { // 屬性名或字段名"type": "text" // 屬性值類型或字段類型,text表示文本,如商品標題"index": "analyzed", // 索引類型"analyzer": "standard" // 設置使用的分詞器},"字段名": { // 屬性名或字段名"type": "text" // 屬性值類型或字段類型,text表示文本,如商品標題"index": "analyzed", // 索引類型"analyzer": "standard" // 設置使用的分詞器}}}
}
kinana操作:
POST /indexes1/goods
{"mapping": {"properties": {"id": {"type": "long"},"name": {"type": "text","index": "analyzed","analyzer": "ik_max_word"},"price":{"type": "float"},"created_time":{"type": "date","format":"yyyy-MM-dd HH:mm:ss"}}}
}
數(shù)據(jù)類型[了解]
elasticsearch中支持的常見字段數(shù)據(jù)類型:
類型 | 描述 |
---|---|
text | 字符串類型,可以模糊查詢, 可以分詞查詢,不能聚合、排序 |
keyword | 字符串類型,只能精準查詢, 不能分詞查詢,可以聚合、排序 |
long | 有符號的64位整數(shù), 范圍:[?263 ~ 263-1] |
Integer | 有符號的32位整數(shù), 范圍: [?231 ~ 231-1] |
short | 有符號的16位整數(shù), 范圍: [-32768 ~ 32767] |
byte | 有符號的8位整數(shù), 范圍: [-128 ~ 127] |
float | 32位單精度浮點數(shù) |
double | 64位雙精度浮點數(shù) |
boolean | 布爾類型,支持使用字符串,數(shù)字等零值表示true/false |
date | 日期類型, |
date_nanos | 日期納秒類型, |
binary | 二進制類型,Base64編碼字符串的二進制值 |
Range | 范圍類型,有integer_range, float_range, long_range, double_range, date_range等 |
array | 數(shù)組類型,ES中沒有專門的數(shù)組類型, 直接使用[ ]定義即可,所有的成員的值必須是同一種數(shù)據(jù)類型 |
object | 對象類型,以json對象為結構 |
使用默認類型_doc代替映射的創(chuàng)建,es會內(nèi)部自動推斷字段類型。
PUT /indexes2/_doc/文檔ID
{"name": "商品的標題","price": 18,"created_time": "2022-01-10 22:00:31"
}
_doc
就是默認類型(default type),type在8.x版本會被徹底刪除,以后使用默認類型_doc
替代即可。
查看索引
GET /_cat/indices # 查看所有的索引信息
GET /索引名稱 # 查看指定名稱的索引信息
刪除索引
DELETE /索引名稱
文檔操作
請求方法/method | uri地址 | 描述 |
---|---|---|
PUT(創(chuàng)建,修改) | /索引名稱/_doc/文檔id | 創(chuàng)建文檔(指定文檔id) |
POST(創(chuàng)建) | /索引名稱/_doc/文檔id | 創(chuàng)建文檔,如果uri地址只是以_doc結尾,文檔id是隨機生成的) |
POST(修改) | /索引名稱/_doc/文檔id/_update | 修改文檔 |
DELETE(刪除) | /索引名稱/_doc/文檔id | 刪除文檔 |
GET(查詢) | /索引名稱/_doc/文檔id | 查詢文檔通過文檔ID |
POST(查詢) | /索引名稱/_doc/文檔id/_search | 查詢所有數(shù)據(jù) |
添加文檔
POST /索引名稱/_doc
{"id": 1,"name": "華為手機","category": "華為","cover": "1.png","price": "3999.00"
}
修改文檔
POST /索引名稱/_doc/1
{"name": "華為手機mate40","price": "4999.00"
}
刪除文檔
DELETE /索引名稱/_doc/1
查詢文檔
查詢文檔有三種方式:
- 主鍵查詢:根據(jù)文檔id查詢
- 精確查詢:根據(jù)關鍵詞查詢,也叫term查詢 浪潮之巔 -> 浪潮之巔
- 匹配查詢:根據(jù)輸入的內(nèi)容先對內(nèi)容進行分詞,再進行分詞匹配查詢 浪潮 -> 浪潮之巔
準備數(shù)據(jù)
POST /indexes4/_doc/1
{"created_time":"2022-04-01","title":"浪潮之巔","content":"一部IT人非讀不可,而非IT人也應該閱讀的作品,講故事的經(jīng)典作品","author_id": 119
}POST /indexes4/_doc/2
{"post_date":"2022-03-12","title":"人月神話","content":"一部IT人非讀不可,而非IT人也應該閱讀的作品,講人與團隊關系作品","author_id": 120
}POST /indexes4/_doc/3
{"post_date":"2021-12-16","title":"代碼之髓","content":"小日子過得不錯的人寫的作品,對代碼中各種語言結構的實現(xiàn)進行揭秘","author_id": 110
}
主鍵查詢
# GET /索引名稱/_doc/1
GET /indexes4/_doc/3
精確查詢
POST /索引名稱/_search{"query": {"term": {"字段名": {"value": "字段值"},"字段名": {"value": "字段值"}}}
}# 如果是text格式,無法精確查詢的,只能匹配查詢
kibana操作:
POST /indexes4/_search
{"query": {"term": {"author_id": {"value": 119}}}
}
匹配查詢
查詢所有
POST /索引名稱/_search
{"query": {"match_all": {}},"sort": [ # 排序,注意:text無法使用排序,keyword才支持# {"字段名":"排序規(guī)則,asc正序, desc倒序"}{"title": "asc" }],"from": 0, # 分頁,查詢起始下標"size": 2, # 指定返回結果數(shù)量"_source": ["title", "content"] # 指定只返回部分字段
}
kibana操作:
POST /indexes4/_search
{"query": {"match_all": {}},"sort": {"author_id": "desc"},"from": 0,"size": 4,"_source": ["title"]
}
條件查詢
格式:
POST /索引名稱/_search
{"query": {"match": {"字段名": "查詢條件值"}}
}
POST /indexes4/_search
{"query": {"match": {"content": "非讀不可"}}
}
若有錯誤與不足請指出,關注DPT一起進步吧!!!