超實用企業級搜尋引擎_Elasticsearch(二)基於RESTFul Api操作
Elasticsearch(二)基於RESTFul Api操作
想要進行API操作,必須安裝好Elasticsearch,如果沒安裝的,可以參考上篇去操作一波,再來學習API操作噢!
Elasticsearch的 API,我們可以不用每個API語法啥的都背的滾瓜爛熟,煌sir跟你說,真沒必要,API,我們做到了解語法格式,能知道別人操作的時候,這API的一些語法含義即可,然後輔助我們去學對應Java API,只有基本瞭解了,再去接觸Java API,煌sir直說了,事半功倍,話不多說,上貨!!!!
一.基本概念(名詞解釋)
Elasticsearch也是基於Lucene的全文檢索庫,本質也是儲存資料,很多概念與MySQL類似的。
索引(indices) |
Databases 資料庫 |
型別(type) |
Table 資料表 |
文件(Document) |
Row 行 |
欄位(Field) |
Columns 列 |
- 索引(庫):index 索引,相當於 database,用於管理所有的資料。
- 型別:type型別,相當於 table。
二.索引操作
執行操作,下方程式碼和例項:
例如:
1.建立索引
- 語法1
PUT 索引名稱
- 語法2:
PUT 索引名稱
{
引數
}
- 例項
/*語法1:使用預設引數 */
PUT book
/*語法2:使用自定義引數 */
PUT book2{
"settings": {
"number_of_shards": "4",/*分片數量*/
"number_of_replicas": "1"/*副本數量*/
}
}
2.檢視索引
- 語法
GET 索引庫名稱
- 例項
GET book
3.刪除索引
- 語法
DELETE 索引庫
- 例項
DELETE book
三.對映配置(型別)
1.建立對映
- 語法:
- PUT 進行操作是,如果型別沒有將建立一個,如果型別已經存在將進行更新。
PUT 索引/_mapping/型別
{
"properties" : {
"屬性名": {
type : "test",//型別index : true,//是否索引,預設true,方便查詢
store : false,//是否儲存,預設false,多留一個備份
analyzer: "分詞器"//ik_max_word 中文分詞器
},
"屬性名": {
}
}
}
- 例項
PUT czxy/_mapping/book2
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"images": {
"type": "keyword",
"index": true
},
"price": {
"type": "float"
}
}
}
2.查詢對映
- 語法
GET 索引庫/_mapping
- 例項
GET czxy/_mapping
三.資料操作
1.新增資料:無id
- 語法:
POST _index/_type
{
"屬性":"值",
"屬性2:"值2
}
- 例項
POST czxy/book
{
"title": "Java程式設計思想",
"images": "1.jpg",
"price": 58.3
}
czxy/book
{
"title": "Java核心技術",
"images": "2.jpg",
"price": 99.9
}
czxy/book
{
"title": "PHP程式設計思想",
"images": "3.jpg",
"price": 68.8
}
2.新增或更新資料:有id
- 語法:如果id存在將更新,如果不存在,將新增
PUT _index/_type/id
{
"屬性":"值",
"屬性2:"值2
}
- 例項
PUT czxy/book/b001
{
"title": "女神養成記II",
"images": "美女.jpg",
"price": 88.88
}PUT czxy/book/b002
{
"title": "壞蛋是怎麼煉成的",
"images": "gg圖.jpg",
"price": 66.66
}
3.刪除資料
- 語法:
DELETE _index/_type/id
- 例項
DELETE czxy/book/b002
四.查詢操作
1.通過id查詢
- 語法1:通過id查詢所有 (select * from book where id = ?)
GET _index/_type/id
- 語法2:通過id查詢部分 ( select title,price from book where id = ?)
GET _index/_type/id?_source=欄位,欄位2
- 例項
GET /czxy/book/b001
GET /czxy/book/b001?_source=title,price
2.查詢所有
- 語法1:所有索引庫,查詢操作,查詢所有
GET _search
{
"query" : {
"match_all" : {
}
}
}
- 語法2:指定索引庫,查詢操作,查詢所有
GET/索引庫/_search
{
"query" : {
"match_all" : {
}
}
}
- 語法3:指定索引庫,查詢操作,查詢部分列資料
GET /索引庫/_search
{
"query" : {
"match_all" : {
}
},
"_source": ["欄位","欄位2",....]
}
- 例項1:所有庫
GET _search
{
"query": {
"match_all": {
}
}
}
- 例項2:指定庫
GET /czxy/_search
{
"query": {
"match_all": {
}
}
}
- 例項3:部分資料
GET czxy/_search
{
"query": {
"match_all": {
}
},
"_source": ["title","price"]
}
3.關鍵字查詢
- 使用match 處理條件
- 語法:
GET _index/_search
{
"query" : {
"match" : {
欄位名: 值
}
}
}
- 需求:查詢title為 “Java程式設計思想”
- title 型別 text,表示支援分詞,只要與“Java程式設計思想”部分詞相同,就可以查詢出來
GET czxy/_search
{
"query": {
"match": {
"title": "Java程式設計思想"
}
}
}
4.複合查詢:must (交集 and)
- 語法:
- 使用 bool 進行多條件拼湊
- 採用 must 、must_not 進行資料過濾
- must 確定留下的資料
- must_not 確定不需要的資料
GET czxy/_search
{
"query": {
"bool": {
"must": [
{
關鍵字查詢
}
]
}
}
}
- 例項1:採用多條件進行查詢,查詢title為 “Java程式設計思想”
GET czxy/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "Java程式設計思想"
}
}
]
}
}
}
- 例項2:採用多條件進行查詢,查詢title為 “Java程式設計思想”,不含PHP
- 採用多條件進行查詢,查詢title為 “Java程式設計思想”
GET czxy/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "Java程式設計思想"
}
}
],
"must_not": [
{
"match": {
"title": "PHP"
}
}
]
}
}
}
5.複合查詢:should (並集 or)
- 語法
GET czxy/_search
{
"query": {
"bool": {
"should": [
{
關鍵字查詢
},
....
]
}
}
}
- 需求:查詢“PHP程式設計思想” ,以及 女神養成記 相關資料
GET czxy/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"title": "PHP程式設計思想"
}
},
{
"match": {
"title": "女神養成記"
}
}
]
}
}
}
6.精準查詢:term
- 語法
- 注意:精準查詢指定資料型別(數值、布林、未分詞字串)
GET _index/_search
{
"query": {
"term" : {
欄位
}
}
}
- 需求:查詢價格為68.8 資訊
GET czxy/_search
{
"query": {
"term": {
"price": {
"value": 68.8
}
}
}
}
- 結論
- 如果資料未分詞,且需要精準查詢,使用term
- 普通查詢,對資料進行分詞處理,使用match
7.範圍查詢:range
- 語法:
GET 索引庫/_search
{
"query": {
"range": {
"欄位": {
gt : "大於",
lt : "小於",
gte : "大於或等於",
lte : "小於或等於"
}
}
}
}
- 需求:查詢價格在60-90之間
GET czxy/_search
{
"query": {
"range": {
"price": {
"gte": 60,
"lte": 90
}
}
}
}
8.排序: sort
- 語法
GET czxy/_search
{
"query": {
"match_all": {
}
},
"sort" : {
"欄位": {
"order" : "排序"//asc 、desc
}
}
}
- 需求:按照價格降序
GET czxy/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
9.分類:from + size
GET czxy/_search
{
"query": {
"match_all": {
}
},
"from" : 0,//開始索引號,從0開始的
"size" : 2//每頁的個數
}
- 例項
GET czxy/_search
{
"query": {
"match_all": {}
},
"from": 3,
"size": 2
}
總結:(作圖不易,費好大功夫整個大圖完整截出來,不管怎樣,幹就完了!)
請給努力中的自己點個贊哦!
每天進步一點點`~~~~~