自定義elasticsearch分析器(索引備份和恢復(fù))

elasticsearch全文檢索

示例:

1.準(zhǔn)備數(shù)據(jù)

使用kibana,準(zhǔn)備兩條數(shù)據(jù)

PUT /testindex/users/102
{
  "name":"zhangsan",
  "age":25
}
PUT /testindex/users/101
{
  "name":"ZHANgsan",
  "age":24
}

2.查詢示例

GET /testindex/users/_search
{
  "query": {
    "match": {
      "name":  "誰(shuí)是zhangsan啊"
    }
  }
}

我們發(fā)現(xiàn)兩條數(shù)據(jù)都被查詢了出來(lái)。那么es是如何實(shí)現(xiàn)的呢?

分析器(analyzer )

官網(wǎng)描述.
概括來(lái)說(shuō)分析器一般有三部分組成,
1、字符過(guò)濾器(Character Filters)
2、分詞器(Tokenizers)
3、分詞過(guò)濾器(Token filters)

ES 給我們內(nèi)置了若干分析器類型。其中常用的是標(biāo)準(zhǔn)分析器,名稱叫做
"standard"。我們肯定需要擴(kuò)展,并使用一些第三方分析器。

不過(guò)我們得先了解標(biāo)準(zhǔn)分析器是 怎么工作的。Anaylyzer通常由一個(gè)Tokenizer (怎么分詞), 以及若干個(gè) TokenFilter(過(guò)濾分詞)、 Character Filters(過(guò)濾字符)組成。
下面我們使用具體例子來(lái)學(xué)習(xí)一下

1.標(biāo)準(zhǔn)分析器(es內(nèi)置)

POST _analyze
{
  "analyzer": "standard",
  "text": "誰(shuí)是zhangsan啊"
}

2.簡(jiǎn)單分析器

POST _analyze
{
  "analyzer": "simple",
  "text": "誰(shuí)是zHangsan啊"
}

3.標(biāo)準(zhǔn)分詞器(注意框選中的單詞)

POST _analyze
{
  "tokenizer": "standard",
  "text": "誰(shuí)是zhANgSan啊"
}

顯然僅僅使用標(biāo)準(zhǔn)分詞器并不能做到大小寫的忽略。

4.組合使用

POST _analyze
{
  "tokenizer": "standard",
  "filter": ["lowercase"], 
  "char_filter": ["html_strip"], 
  "text": "誰(shuí)是<b>zhANg</b>San啊"
}

在運(yùn)行結(jié)果中,我們看到他和我們預(yù)想的結(jié)果是一致的。我們使用的標(biāo)準(zhǔn)的分詞器("tokenizer": "standard",)使中文和單詞分開(kāi),使用小寫分詞過(guò)濾器("filter": ["lowercase"], )使單詞小寫化,使用字符過(guò)濾器("char_filter": ["html_strip"], )使text中的html標(biāo)簽過(guò)濾掉。最終的效果是和標(biāo)準(zhǔn)分析器("analyzer": "standard",)是一致的。

通過(guò)上面的例子,我們顯然可以知道,我們是可以根據(jù)自己的業(yè)務(wù)自定義分析器的。
我們自定義一個(gè)自己的分析器

PUT testindex
{
  "settings": 
  {
    "analysis": {
      "analyzer": {
        "my-analyzer":{
          "type":"custom",
          "tokenizer":"standard",
          "char_filter":["html_strip"],
          "filter":["lowercase"]
        }
      }
    }
  }
}

這樣執(zhí)行會(huì)報(bào)錯(cuò),因?yàn)樗饕呀?jīng)存在了。而自定義分析器需要在索引建立之前建立。所以這樣又引出了我們要學(xué)習(xí)的另一個(gè)知識(shí)點(diǎn):索引的備份和恢復(fù)。

索引的備份和恢復(fù)

我使用的是docker 拉取sebp/elk鏡像來(lái)搭建的。運(yùn)行容器正常之后,我們來(lái)進(jìn)行下面的操作。

1.配置elasticsearch.yml文件

進(jìn)入容器

docker exec -it elk /bin.bash

sudo vim  /opt/elasticsearch/config/elasticsearch.yml

//在配置文件最后加上,path.repo: /var/backups
path.repo: /var/backups

2.創(chuàng)建倉(cāng)庫(kù)

//創(chuàng)建倉(cāng)庫(kù)
PUT /_snapshot/mybak
{
  "type": "fs",
  "settings": {
    "location": "/var/backups/testindex"
  }
}
//查看倉(cāng)庫(kù)信息
GET /_snapshot/mybak

3.備份索引

//備份索引
PUT /_snapshot/mybak/bak1?wait_for_completion=true
{
  "indices": "testindex"
}

4.刪除索引和自定義分析器

#刪除索引
DELETE testindex

#自定義分析器
PUT testindex
{
  "settings": 
  {
    "analysis": {
      "analyzer": {
        "my-analyzer":{
          "type":"custom",
          "tokenizer":"standard",
          "char_filter":["html_strip"],
          "filter":["lowercase"]
        }
      }
    }
  }
}

5.備份和恢復(fù)

#備份恢復(fù)
#1.關(guān)閉索引
POST testindex/_close
#2.恢復(fù)
POST _snapshot/mybak/bak2/_restore?wait_for_completion=true
{
  "indices": "testindex"
}
#3.打開(kāi)索引
POST testindex/_open
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • Solr&ElasticSearch原理及應(yīng)用 一、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,638評(píng)論 1 17
  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,201評(píng)論 3 119
  • 有沒(méi)有聽(tīng)過(guò)相似的這些話,父母跟你說(shuō),你太懶,不夠努力,所以成績(jī)這么差。老師跟你說(shuō),你不夠主動(dòng)積極學(xué)習(xí),所以永遠(yuǎn)做不...
    羅瑛敦閱讀 293評(píng)論 5 10
  • 人們常常是一路走著,一路遺忘,遺忘曾經(jīng)暗下決心的理想, 把它淹沒(méi)在名里,在利里,或者在柴米油鹽里, 也或者只是簡(jiǎn)簡(jiǎn)...
    木子嘉贏閱讀 868評(píng)論 0 2

友情鏈接更多精彩內(nèi)容