什么是ElasticSearch
Elasticsearch(ES) 是一個(gè)基于Lucene構(gòu)建的開(kāi)源、分布式茄厘、RESTful接口全文搜索引擎靶剑。ElasticSearch還是一個(gè)分布式文檔數(shù)據(jù)庫(kù),其中每個(gè)字段均被索引且可被搜索,它能夠擴(kuò)展至數(shù)以百計(jì)的服務(wù)器存儲(chǔ)以及處理PB級(jí)的數(shù)據(jù)警绩。他可以在很短的時(shí)間內(nèi)存儲(chǔ)、搜索和分析大量的數(shù)據(jù)盅称。
demo地址 :https://github.com/keyuanupup/springboot-elasticsearch
java與ES整合配置
參考項(xiàng)目現(xiàn)有配置
索引的構(gòu)建
- 索引的創(chuàng)建
- 索引的刪除
DELETE http://127.0.0.1:9200/goods
- 判斷索引是否存在
數(shù)據(jù)操作
- 新增數(shù)據(jù)
POST http://127.0.0.1:9200/goods/_doc/00005
{
"name":"褲子",
"skuId":"5",
"spuId":"2",
"colorId":"3",
"price":90.3,
"colorName":"綠色"
}
- 更新數(shù)據(jù)
POST http://127.0.0.1:9200/goods/_doc/00003/_update
{
"doc":{
"price":12.4
}
}
- 刪除數(shù)據(jù)
DELETE http://127.0.0.1:9200/goods/_doc/00002
- 根據(jù)id查詢數(shù)據(jù)
GET http://127.0.0.1:9200/goods/_doc/00003
搜索
- 分頁(yè)
GET http://127.0.0.1:9200/goods/_doc/_search
{
"size":2,
"from":1
}
- 排序
GET http://127.0.0.1:9200/goods/_doc/_search
{
"sort": [
{
"skuId": {
"order": "desc"
}
}
]
}
- term 相等的查詢
GET http://127.0.0.1:9200/goods/_doc/_search
{
"query": {
"term": {
"name.keyword": {
"value": "襪子"
}
}
}
}
- terms in查詢
GET http://127.0.0.1:9200/goods/_doc/_search
{
"query":{
"terms": {
"skuId": [
1,
2
]
}
}
}
- wildcard 模糊匹配(like)
text會(huì)對(duì)字段進(jìn)行分詞處理而keyword則不會(huì)
GET http://127.0.0.1:9200/goods/_doc/_search
{
"query": {
"wildcard": {
"name.keyword": {
"wildcard": "*子牛仔*",
"boost": 1
}
}
}
}
- range 范圍查詢
GET http://127.0.0.1:9200/goods/_doc/_search
{
"query": {
"range": {
"skuId": {
"from": null,
"to": 2,
"include_lower": true,
"include_upper": false,
"boost": 1
}
}
}
}
- match 分詞查詢
GET http://127.0.0.1:9200/goods/_doc/_search
{
"query":{
"match":{
"name":"褲子"
}
}
}
- multi_match 分詞查詢(匹配多詞)
GET http://127.0.0.1:9200/goods/_doc/_search
{
"query": {
"multi_match": {
"query": "紅色 褲子",
"fields": [
"colorName^1.0",
"name^1.0"
],
"boost": 1
}
},
"explain":true
}
- bool
GET http://127.0.0.1:9200/goods/_doc/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"colorId": {
"value": 1,
"boost": 1
}
}
},
{
"wildcard": {
"name.keyword": {
"wildcard": "*襪子*",
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
}
}
- 查詢和過(guò)濾
- 使用過(guò)濾的時(shí)候,es不會(huì)對(duì)條件進(jìn)行打分,效率會(huì)比查詢快
- 查詢指定字段
- 折疊
GET http://127.0.0.1:9200/goods/_doc/_search
{
"collapse": {
"field": "spuId"
}
}
1. 折疊后總數(shù)統(tǒng)計(jì)不準(zhǔn)確
- 權(quán)重
GET http://127.0.0.1:9200/goods/_doc/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"skuId": {
"value": 5,
"boost": 12
}
}
},
{
"term": {
"colorId": {
"value": 1,
"boost": 6
}
}
}
],
"boost": 1
}
},
"sort": [
{
"_score": {
"order": "desc"
}
}
],
"explain":true
}
- aggs(分組)
高級(jí)
-
分片和備份
cluster:代表一個(gè)集群肩祥,集群中有多個(gè)節(jié)點(diǎn),其中有一個(gè)為主節(jié)點(diǎn)缩膝,這個(gè)主節(jié)點(diǎn)是可以通過(guò)選舉產(chǎn)生的混狠,主從節(jié)點(diǎn)是對(duì)于集群內(nèi)部來(lái)說(shuō)的。es的一個(gè)概念就是去中心化疾层,字面上理解就是無(wú)中心節(jié)點(diǎn)将饺,這是對(duì)于集群外部來(lái)說(shuō)的,因?yàn)閺耐獠縼?lái)看es集群痛黎,在邏輯上是個(gè)整體予弧,你與任何一個(gè)節(jié)點(diǎn)的通信和與整個(gè)es集群通信是等價(jià)的。
shards:代表索引分片湖饱,es可以把一個(gè)完整的索引分成多個(gè)分片掖蛤,這樣的好處是可以把一個(gè)大的索引拆分成多個(gè),分布到不同的節(jié)點(diǎn)上琉历。構(gòu)成分布式搜索坠七。分片的數(shù)量只能在索引創(chuàng)建前指定,并且索引創(chuàng)建后不能更改旗笔。
replicas:代表索引副本,es可以設(shè)置多個(gè)索引的副本拄踪,副本的作用一是提高系統(tǒng)的容錯(cuò)性蝇恶,當(dāng)某個(gè)節(jié)點(diǎn)某個(gè)分片損壞或丟失時(shí)可以從副本中恢復(fù)。二是提高es的查詢效率惶桐,es會(huì)自動(dòng)對(duì)搜索請(qǐng)求進(jìn)行負(fù)載均衡撮弧。
- 默認(rèn)1個(gè)分片,一個(gè)備份
- 加入ik分詞器
ik分詞器插件地址 : https://github.com/medcl/elasticsearch-analysis-ik
使用方法
- 下載項(xiàng)目 - mvn package - 拷貝elasticsearch-analysis-ik-7.1.0\target\releases\elasticsearch-analysis-ik-7.0.0.zip 到目錄 elasticsearch-7.1.0\plugins - 重啟ES
-
加入同義詞
同義詞插件地址 : https://github.com/bells/elasticsearch-analysis-dynamic-synonym
-
重復(fù)數(shù)據(jù)的處理
- 對(duì)數(shù)據(jù)給出明確的排序
- 傳入查詢時(shí)間,只查詢指定時(shí)間前的數(shù)據(jù)
- 使用scroll