1. 程式人生 > WINDOWS開發 >超實用企業級搜尋引擎_Elasticsearch(二)基於RESTFul Api操作

超實用企業級搜尋引擎_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

}

總結:(作圖不易,費好大功夫整個大圖完整截出來,不管怎樣,幹就完了!)

技術分享圖片

請給努力中的自己點個贊哦!

每天進步一點點`~~~~~

來源:http://www.1994july.club/