elasticsearch7.6.*(增刪改查詳細版)


文檔操作

最后有幾句很重要的話!hhhhhh

1、插入

PUT test02/user/3
{
"name":"李四",
"age":"22",
"dec":"合法公民",
"tags":["交友","旅游","愛吃雞"]
}

2、查詢

1、簡單查詢

2、簡單條件查詢

GET test02/user/_search?q=name:學狂神

3、 花樣查詢

1、匹配查詢:
GET test02/user/_search
{
 "query": {
   "match": {
     "name": "學狂神"
  }
}
}
2、結果過濾
GET test02/user/_search
{
 "query": {
   "match": {
     "name": "學狂神"
  }
},
 "_source": ["name"]
}
3、排序
GET test02/user/_search
{
 "query": {
   "match": {
     "name": "學狂神"
  }
},
 "sort": [
  {
     "age": {
       "order": "desc"
    }
  }
]
}
4、分頁查詢
GET test02/user/_search
{
 "query": {
   "match": {
     "name": "學狂神"
  }
},
 "from": 0,//從哪開始
 "size": 2//顯示幾條
}
5、bool查詢

must:必須都滿足,相當於and

GET test02/user/_search
{
 "query": {
   "bool": {
     "must": [
      {
         "match": {
           "name": "狂神"
        }
      },
      {
         "match": {
         "age":"21"
        }
      }
    ]
  }
}
}

should:只需滿足其一,相當於or

GET test02/user/_search
{
 "query": {
   "bool": {
     "should": [
      {
         "match": {
           "name": "狂神"
        }
      },
      {
         "match": {
         "age":"21"
        }
      }
    ]
  }
}
}

must_not:必須不滿足,相當於not

GET test02/user/_search
{
 "query": {
   "bool": {
     "must_not": [
      {
         "match": {
           "name": "狂神"
        }
      },
      {
         "match": {
         "age":"21"
        }
      }
    ]
  }
}
}
6、結果過濾
GET test02/user/_search
{
 "query": {
   "bool": {
     "must": [
      {
         "match": {
           "name": "狂神"
        }
      }
    ],
     "filter": {
       "range": {
         "age": {
           "gte": 10,
           "lte": 22
        }
      }  
    }
  }
}
}
7、mach查詢
1、有一個匹配都能查出來
GET test02/user/_search
{
 "query": {
     "match": {
       "dec": "合法"//有一個字匹配都會被查到
    }
  }
}

查出來后他的得分不一樣:

1.匹配的詞越多越高, 

 

 

2.當匹配的詞相同時,該詞在整個字段值中所站比例越高得分越高

 

 

 

2、那么問題來了,有時候想要對text類型進行相對精確查詢,怎么辦呢?哈哈!方法肯定有:設置and關系
GET test02/_search
{
 "query": {
     "match": {
       "name": {
         "query": "傷感王五",
         "operator": "and"

      }
    }
  }
}

也就是說必須同時滿足所有分詞,

3、那么問題又來了!在 orand 間二選一有點過於非黑即白。 如果用戶給定的條件分詞后有 5 個查詢詞項,想查找只包含其中 4 個詞的文檔,該如何處理?將 operator 操作符參數設置成 and 只會將此文檔排除。

有時候這正是我們期望的,但在全文搜索的大多數應用場景下,我們既想包含那些可能相關的文檔,同時又排除那些不太相關的。換句話說,我們想要處於中間某種結果。

match 查詢支持 minimum_should_match 最小匹配參數, 這讓我們可以指定必須匹配的詞項數用來表示一個文檔是否相關。我們可以將其設置為某個具體數字,更常用的做法是將其設置為一個百分數,因為我們無法控制用戶搜索時輸入的單詞數量:

GET test02/_search
{
 "query": {
     "match": {
       "name": {
         "query": "傷感DJ舞曲",
         "minimum_should_match": "70%"//匹配度
      }
    }
  }
}

匹配算法:這里傷感DJ舞曲可划分為3個詞,3*70% 約等於2。所以只要包含2個詞條就算滿足條件了。

8、精確查詢(詞條(term)查詢)

term查詢是直接通過到倒排索引指定的詞條進行精確查詢

term 查詢被用於精確值 匹配,這些精確值可能是數字、時間、布爾或者那些未分詞(keyword)的字符串

PUT test01/_doc/3
{
 "name":"華為電視",
 "dec":"沒電還能看"
}

GET test01/_search
{
 "query": {
     "term": {
       "dec": {
         "value": "沒電還能看"
      }
    }
  }
}

terms:terms 查詢和 term 查詢一樣,但它允許你指定多值進行匹配。如果這個字段包含了指定值中的任何一個值,那么這個文檔滿足條件:

 

 

 

關於字段類型:

核心數據類型
(1)字符串

  text ⽤於全⽂索引,搜索時會自動使用分詞器進⾏分詞再匹配
  keyword 不分詞,搜索時需要匹配完整的值



(2)數值型

  整型: byte,short,integer,long
  浮點型: float, half_float, scaled_float,double



(3)日期類型

  date

注意 只有text字段會被分詞器解析

9、模糊查詢

fuzzy 查詢是 term 查詢的模糊等價。它允許用戶搜索詞條與實際詞條的拼寫出現偏差,但是偏差的編輯距離不得超過2:

GET test01/_search
{
 "query": {
  "fuzzy": {
    "dec": {
      "value": "MAXDjSO",
      "fuzziness": 1
    }
  }
}
}
10、高亮查詢(可自定義高亮效果)
GET test02/_search
{
 "query": {
   "match": {
     "name": "傷感"
  }
},
 "highlight":{
   "pre_tags": "<p style='color:red'>",//前綴
   "post_tags":"</p>", //后綴
   "fields": {
     "name": {}
  }
}
}

 

 

 

注意:有一個小細節,查詢出來的東西,只有傷感這兩個字會高亮 想想你在百度搜索,是不是也一樣

3、更新

POST test02/user/2/_update
{
"doc":{
  "name":"張三121"
}
}

4、刪除

DELETE test02/user/1

最后總結一句話很重要的話:必須得自己練,必須得自己練、必須得自己練!只有自己練、自己實驗 才會真的明白

如果你是看視頻教學,你不自己敲代碼可能會明白,但也一定記不住

如果是看筆記,你自己肯定也有感觸,不要多說


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM