ElasticSearch 中的中文分詞器以及索引基本操作詳解

2020-12-09 計算機java編程

1.ElasticSearch 分詞器介紹

1.1 內置分詞器

ElasticSearch 核心功能就是數據檢索,首先通過索引將文檔寫入 es。查詢分析則主要分為兩個步驟:

詞條化:分詞器將輸入的文本轉為一個一個的詞條流。過濾:比如停用詞過濾器會從詞條中去除不相干的詞條(的,嗯,啊,呢);另外還有同義詞過濾器、小寫過濾器等。ElasticSearch 中內置了多種分詞器可以供使用。

內置分詞器:

1.2 中文分詞器

在 Es 中,使用較多的中文分詞器是 elasticsearch-analysis-ik,這個是 es 的一個第三方插件,代碼託管在 GitHub 上。

1.2.1 安裝

執行如下命令即可:

1.2.2 測試

es 重啟成功後,首先創建一個名為 test 的索引:

接下來,在該索引中進行分詞測試:

1.2.3 自定義擴展詞庫

1.2.3.1 本地自定義

在 es/plugins/ik/config 目錄下,新建 ext.dic 文件(文件名任意),在該文件中可以配置自定義的詞庫。

如果有多個詞,換行寫入新詞即可。

然後在 es/plugins/ik/config/IKAnalyzer.cfg.xml 中配置擴展詞典的位置:

1.2.3.2 遠程詞庫

也可以配置遠程詞庫,遠程詞庫支持熱更新(不用重啟 es 就可以生效)。

熱更新只需要提供一個接口,接口返回擴展詞即可。

具體使用方式如下,新建一個 Spring Boot 項目,引入 Web 依賴即可。然後在 resources/stastic 目錄下新建 ext.dic 文件,寫入擴展詞:

接下來,在 es/plugins/ik/config/IKAnalyzer.cfg.xml 文件中配置遠程擴展詞接口:

配置完成後,重啟 es ,即可生效。

熱更新,主要是響應頭的 Last-Modified 或者 ETag 欄位發生變化,ik 就會自動重新加載遠程擴展辭典。

2. ElasticSearch 索引管理

啟動一個 master 節點和兩個 slave 節點進行測試(參考第二集的視頻搭建)。

2.1 新建索引

2.1.1 通過 head 插件新建索引

在 head 插件中,選擇 索引選項卡,然後點擊新建索引。新建索引時,需要填入索引名稱、分片數以及副本數。

索引創建成功後,如下圖:

0、1、2、3、4 分別表示索引的分片,粗框表示主分片,細框表示副本(點一下框,通過 primary 屬性可以查看是主分片還是副本)。.kibana 索引只有一個分片和一個副本,所以只有 0。

2.1.2 通過請求創建

可以通過 postman 發送請求,也可以通過 kibana 發送請求,由於 kibana 有提示,所以這裡採用 kibana。

創建索引請求:

PUTbook

創建成功後,可以查看索引信息:

需要注意兩點:

索引名稱不能有大寫字母

索引名是唯一的,不能重複,重複創建會出錯

2.2 更新索引

索引創建好之後,可以修改其屬性。

例如修改索引的副本數:

修改成功後,如下:

更新分片數也是一樣。

2.3 修改索引的讀寫權限

索引創建成功後,可以向索引中寫入文檔:

寫入成功後,可以在 head 插件中查看:

默認情況下,索引是具備讀寫權限的,當然這個讀寫權限可以關閉。

例如,關閉索引的寫權限:

關閉之後,就無法添加文檔了。關閉了寫權限之後,如果想要再次打開,方式如下:

其他類似的權限有:

blocks.writeblocks.readblocks.read_only2.4 查看索引

head 插件查看方式如下:

請求查看方式如下:

GETbook/_settings

也可以同時查看多個索引信息:

GETbook,test/_settings

也可以查看所有索引信息:

GET_all/_settings

2.5 刪除索引

head 插件可以刪除索引:

請求刪除如下:

DELETEtest

刪除一個不存在的索引會報錯。

5.6 索引打開/關閉

關閉索引:

POSTbook/_close

打開索引:

POSTbook/_open

當然,可以同時關閉/打開多個索引,多個索引用 , 隔開,或者直接使用 _all 代表所有索引。

2.7 複製索引

索引複製,只會複製數據,不會複製索引配置。

複製的時候,可以添加查詢條件。

2.8 索引別名

可以為索引創建別名,如果這個別名是唯一的,該別名可以代替索引名稱。

添加結果如下:

將 add 改為 remove 就表示移除別名:

查看某一個索引的別名:

GET/book/_alias

查看某一個別名對應的索引(book_alias 表示一個別名):

GET/book_alias/_alias

可以查看集群上所有可用別名:

GET/_alias

相關焦點

  • ElasticSearch-hard插件及IK分詞器安裝
    操作步驟如下圖:IK分詞器安裝:我們先來看看什麼式分詞?為什麼需要使用分詞器?分詞:即把一段中文或者別的劃分成一個個的關鍵字,我們在搜索時候會把自己的信息進行詞,會把資料庫中或者索引庫中的數據進行分詞,然後進行一個匹配操作,默認的中文分詞是將每個字看成一個詞,比如"中國的花"會被分為"中","國","的","花",這顯然是不符合要求的,所以我們需要安裝中文分詞器ik來解決這個問題。
  • ElasticSearch最全詳細使用教程:入門、索引管理、映射詳解、索引別名、分詞器、文檔管理、路由、搜索詳解
    別名的用途如果希望一次查詢可查詢多個索引。如果希望通過索引的視圖來操作索引,就像資料庫庫中的視圖一樣。索引的別名機制,就是讓我們可以以視圖的方式來操作集群中的索引,這個視圖可是多個索引,也可是一個索引或索引的一部分。
  • 搜尋引擎 Elasticsearch 中文擴展分詞器使用,更快更準確!
    Elasticsearch是一個基於Lucene,Lucene是開源的Java索引檢索組件。它提供了一個分布式多用戶能力的全文搜尋引擎,基於RESTful web接口。Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜尋引擎。
  • ElasticSearch
    1.5 ES核心概念1.6 ik分詞器1.7 數據類型1.7.1 簡單數據類型1.7.2 複雜數據類型2 ESClient對象創建3 操作索引3.1 新建索引3.2 刪除索引3.3 查詢索引3.4 判斷索引3.5 索引操作總結
  • 基於Ansj 的 elasticsearch 2.3.1 中文分詞插件
    前言這是一個elasticsearch的中文分詞插件,基於Ansj中文分詞。發起者Onni大神。
  • 全文搜尋引擎ElasticSearch入門教程
    $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip  $ unzip elasticsearch-5.5.1.zip  $ cd elasticsearch-5.5.1/  接著,進入解壓後的目錄,運行下面的命令,啟動 Elastic。
  • 深入淺出 spring-data-elasticsearch 之 ElasticSearch 架構初探(一)
    索引(Index)索引,用於區分文檔成組,即分到一組的文檔集合。索引,用於存儲文檔和使文檔可被搜索。比如項目存索引 project 裡面,交易存索引 sales 等。類型(Type)類型,用於區分索引中的文檔,即在索引中對數據邏輯分區。比如索引 project 的項目數據,根據項目類型 ui 項目、插畫項目等進行區分。
  • 嚴選 | Elastic中文社區201903錯題本
    https://elasticsearch.cn/question/65261.8 增加索引個數能有效的提高寫入效率嗎?寫入及索引性能核心參考:http://t.cn/EibAIyb網上所有的書籍、文檔基本都離不開連結給出的東西1.9 Elasticsearch6.5.3全聚合出現與MySQL聚合結果不一致的問題MySQL中的聚合語句:select sum(adv_price) from report_2019_01 where report_time
  • 一篇搞懂ElasticSearch(附學習腦圖)
    欄位Field:類似於mysql中的column,文檔中包含的一組欄位或者是鍵值對,欄位的值可以是一個簡單的(標量)值(如字符串,整數,日期),或者一個嵌套的結構就像一個數組或對象映射Mapping:像是mysql中的模式定義,每個索引有一個映射,定義了索引中各個Field的類型,映射可以自己定義,也可以自動生成
  • 這篇實戰攻略,帶你輕鬆入門Elastic search
    對ES的操作,基本都是對索引操作,一個ES集群中,可以創建多個索引。索引定義了一組文檔的數據模型和處理方法。每個索引可以有多個主分片和副本分片,分別保存在不同的節點。主分片的作用是對索引的擴容,使一個索引的容量可以突破單機的限制。副本分片是對數據的保護,每個主分片對應一個或多個副本分片,當主分片所在節點宕機時,副本分片會被提升為對應的主分片使用。
  • ElasticSearch 索引 VS MySQL 索引
    前言這段時間在維護產品的搜索功能,每次在管理臺看到 elasticsearch 這麼高效的查詢效率我都很好奇他是如何做到的。只需要先通過查詢到起始節點的位置,然後在葉子節點中依次往後遍歷即可。當數據量巨大時,很明顯索引文件是不能存放於內存中,雖然速度很快但消耗的資源也不小;所以 MySQL 會將索引文件直接存放於磁碟中。
  • Open Distro for Elasticsearch 1.1.0 發布,Elasticsearch 發行版
    Open Distro for Elasticsearch 是 AWS 開源的 Elasticsearch 發行版。1.1.0 版本包括 ElasticSearch 7.1.1、Kibana 7.1.1 的上遊開源版本,以及 SQL、安全性、性能分析器和 Kibana 插件以及 SQL JDBC 驅動程序的最新更新。
  • Elasticsearch Analyzer
    Elasticsearch內置了10+種分詞器,主要分為三類:Word Oriented Tokenizer、Partial Word Tokenizer和Structured Text Tokenizer。
  • Elasticsearch實現原理分析
    在elasticsearch.yml中,將nodes.master屬性設置為true(默認),可以將節點配置為有資格成為主節點的節點。對於大型生產集群,建議擁有一個專用主節點來控制集群,並且不服務任何用戶請求。數據節點用來保存數據和倒排索引。默認情況下,每個節點都配置為一個data節點,並且在elasticsearch.yml中將屬性node.data設置為true。
  • ElasticSearch 億級數據檢索案例實戰!
    三、elasticsearch檢索原理3.1 關於ES和Lucene基礎結構談到優化必須能了解組件的基本原理,才容易找到瓶頸所在,以免走多種彎路,先從ES的基礎結構說起(如下圖):一些基本概念:,關於數據結構的優化通常來說是對Lucene的優化,它是集群的一個存儲於檢索工作單元,結構如下圖:在Lucene中,分為索引(錄入)與檢索(查詢)兩部分,索引部分包含 分詞器、過濾器、字符映射器等,檢索部分包含 查詢解析器等。
  • 為什麼Elasticsearch查詢變得這麼慢了?
    默認情況下,所有版本的Elasticsearch都會關閉慢速日誌,因此您必須對群集設置和索引設置進行一些更新。這些示例適用於使用elasticsearch 6.2,但您可以在此處找到所有以前的版本。 只需將$ES_version替換為您正在使用的版本,例如5.5版本設置官網參考:http://t.cn/E7Hq2NG。
  • Elasticsearch 索引設計實戰指南
    傳統資料庫中的多表關聯在 ES 中如何設計? ......  這麼看來,沒有那麼 Easy,坑還是得一步步的踩出來的。 正如攜程架構師 WOOD 大叔所說「做搜索容易,做好搜索相當難!」,VIVO 搜尋引擎架構師所說「 熟練使用 ES 離做好搜索還差很遠!」。  本文主結合作者近千萬級開發實戰經驗,和大家一起深入探討一下Elasticsearch 索引設計......
  • Elasticsearch 7.9.0 發布 - OSCHINA - 中文開源技術交流社區
    在具有欄位級別安全性的情況下運行滾動搜索時,在Elasticsearch中發現了欄位洩露漏洞。這可能導致攻擊者獲得針對受限索引的其他權限。此漏洞影響 7.9.0 和 6.8.12 之前的所有 Elasticsearch 版本。用戶必須升級到 Elasticsearch 7.9.0 或 6.8.12 版本才能獲得此修復程序。
  • 嚴選 | Elastic中文社區201902錯題本
    開發最最懊悔的事莫過於:別人已經給出了方案,但是我們仍然在黑暗中苦逼的摸索。因此,我從2018年4月——至今,每月都會梳理出了Elasticsearch中文社區的精華乾貨——簡稱:Elastic錯題本,問題大多來自Medcl、wood大叔等大牛的精彩回復,結合實戰嚴選的核心問題。放在了GitHub上。
  • 2021-Java後端工程師面試指南-(Elasticsearch)
    lucenelucene,就是一個jar包,裡面包含了封裝好的各種建立倒排索引,以及進行搜索的代碼,包括各種算法。我們就用java開發的時候,引入lucene jar,然後基於lucene的api進行去進行開發就可以了。那你聊聊Elasticsearch的核心概念,就是我們經常用的那些。