get _cat/nodes
示例:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5CN1YjNyYjN1QjMyEjNzYTMvwVNwETMxIDMy8CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.jpg)
檢視索引設定請求格式:
get /索引庫名
檢視所有索引庫配置
get *
删除索引請求格式:
delete /索引庫名
示例:
使用head請求,檢視索引是否存在:
head /索引庫名
[]( )映射配置
索引有了,接下來肯定是添加資料。但是,在添加資料之前必須定義映射。映射是定義文檔的過程,文檔包含哪些字段,這些字段是否儲存,是否索引,是否分詞等,配置清楚映射,elasticsearch會幫我們進行索引庫的建立。
建立映射字段:
put /索引庫名/_mapping/類型名稱
{
"properties": {
"字段名": {
"type": "類型",
"index": true,
"store": true,
"analyzer": "分詞器"
}
類型名稱:就是前面将的type的概念,類似于資料庫中的不同表
字段名:任意填寫 ,可以指定許多屬性,例如:
type:類型,可以是text、long、short、date、integer、object等
index:是否索引,預設為true
store:是否存儲,預設為false
analyzer:分詞器,這裡的<code>ik_max_word</code>即使用ik分詞器
字段屬性詳解:
type:資料類型
string類型,分兩種:
<code>text:</code>可分詞,不可參與聚合
<code>keyword:</code>不可分詞,資料會作為完整字段進行比對,可以參與聚合
numerical:數值類型,分兩類
基本資料類型:<code>long、interger、short、byte、double、float、half_float</code>
浮點數的高精度類型:<code>scaled_float</code>,需要指定一個精度因子,比如10或100。elasticsearch會把真實值乘以這個因子後存儲,取出時再還原。
date:日期類型, elasticsearch可以對日期格式化為字元串存儲,但是建議我們存儲為毫秒值,存儲為long,節省空間。
index:影響字段的索引情況
true:字段會被索引,則可以用來進行搜尋。預設值就是true,你不進行任何配置,字段就會被索引
false:字段不會被索引,不能用來搜尋,有些字段是我們不希望被索引的,需要手動設定index為false
store:是否将資料進行額外存儲。
elasticsearch在建立文檔索引時,會将文檔中的原始資料備份,儲存到一個叫做<code>_source</code>的屬性中。而且我們可以通過過濾<code>_source</code>來選擇哪些要顯示,哪些不顯示。而如果設定store為true,就會在<code>_source</code>以外額外存儲一份資料,多餘,是以一般我們都會将store設定為false,事實上,store的預設值就是false。
boost:激勵因子,與lucene中一樣
示例:發起請求
檢視映射關系:
get /索引庫名/_mapping
[]( )新增資料
通過post請求,可以向一個已經存在的索引庫中添加資料。
post /索引庫名/類型名
"key":"value"
查詢資料:
get _search
"query":{
"match_all":{}
智能判斷: 事實上elasticsearch非常智能,你不需要給索引庫設定任何mapping映射,它也可以根據你輸入的資料來判斷類型,動态添加資料映射。
測試一下:
post /ly/goods/2
"title":"蘋果手機",
"images":"http://image.ly.com/12479122.jpg",
"price":2899.00,
"stock": 200,
"saleable":true
額外添加了stock庫存,和saleable是否上架兩個字段。檢視結果:
在看下索引庫的映射關系:
[]( )修改資料
把剛才新增的請求方式改為put,就是修改了。不過修改必須指定id,
id對應文檔存在,則修改
id對應文檔不存在,則新增
[]( )删除資料
删除使用delete請求,同樣,需要根據id進行删除:
delete /索引庫名/類型名/id值
[]( )查詢
基本查詢:
get /索引庫名/_search
"查詢類型":{
"查詢條件":"查詢條件值"
這裡的query代表一個查詢對象,裡面可以有不同的查詢屬性
查詢類型:<code>match_all</code>, <code>match</code>,<code>term</code> , <code>range</code> 等等
查詢條件:查詢條件會根據類型的不同,寫法也有差異,後面詳細講解
查詢所有(match_all):
get /ly/_search
"match_all": {}
比對查詢(match):
添加資料,便于測試:
put /ly/goods/2
"price":3899.00
put /ly/goods/3
"title":"華為手機",
"price":1899.00
put /ly/goods/4
"title":"小米電視",
"price":5899.00
or關系: <code>match</code>類型查詢,會把查詢條件進行分詞,然後進行查詢,多個詞條之間是or的關系
get /heima/_search
"match":{
"title":"小米電視"
結果:
在上面的案例中,不僅會查詢到電視,而且與小米相關的都會查詢到,多個詞之間是<code>or</code>的關系。
and關系: 某些情況下,我們需要更精确查找,我們希望這個關系變成<code>and</code>,可以這樣做:
"match": {
"title": {
"query": "小米電視",
"operator": "and"
本例中,隻有同時包含<code>小米</code>和<code>電視</code>的詞條才會被搜尋到。
or和and之間:
在 <code>or</code> 與 <code>and</code> 間二選一有點過于非黑即白。 如果使用者給定的條件分詞後有 5 個查詢詞項,想查找隻包含其中 4 個詞的文檔,該如何處理?我們如何獲得處于中間的某種結果?
<code>match</code> 查詢支援 <code>minimum_should_match</code> 最小比對參數, 這讓我們可以指定必須比對的詞項數用來表示一個文檔是否相關。我們可以将其設定為某個具體數字,更常用的做法是将其設定為一個<code>百分數</code>,因為我們無法控制使用者搜尋時輸入的單詞數量:
"title":{
"query":"小米曲面電視",
"minimum_should_match": "75%"
多字段查詢(multi_match):
<code>multi_match</code>與<code>match</code>類似,不同的是它可以在多個字段中查詢
"multi_match": {
"query": "小米",
"fields": [ "title", "subtitle" ]
詞條比對(term):
<code>term</code> 查詢被用于精确值 比對,這些精确值可能是數字、時間、布爾或者那些未分詞的字元串
"term":{
"price":2699.00
多詞條精确比對(terms):
<code>terms</code> 查詢和 term 查詢一樣,但它允許你指定多值進行比對。如果這個字段包含了指定值中的任何一個值,那麼這個文檔滿足條件:
"terms":{
"price":[1899.00,3899.00]
[]( )結果過濾
預設情況下,elasticsearch在搜尋的結果中,會把文檔中儲存在<code>_source</code>的所有字段都傳回。如果我們隻想擷取其中的部分字段,我們可以添加<code>_source</code>的過濾
直接指定字段:
"_source": ["title","price"],
"query": {
"term": {
"price": 2699
傳回的結果:
指定includes和excludes:
可以通過:
<code>includes:</code>來指定想要顯示的字段
<code>excludes:</code>來指定不想要顯示的字段
"_source": {
"includes":["title","price"]
},