搜尋引擎 Elasticsearch 中文擴展分詞器使用,更快更準確!

2020-12-12 時代Java

Elasticsearch是一個基於Lucene,Lucene是開源的Java索引檢索組件。它提供了一個分布式多用戶能力的全文搜尋引擎,基於RESTful web接口。Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜尋引擎。Elasticsearch用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。官方客戶端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和許多其他語言中都是可用的。根據DB-Engines的排名顯示,Elasticsearch是最受歡迎的企業搜尋引擎,其次是Apache Solr,也是基於Lucene。

Elasticsearch 運行在一個分布式的環境中,從設計之初就考慮到了這一點,目的只有一個,讓您永遠高枕無憂。我們的集群可以隨著您的需求的增長而增長——只需再添加一個節點就行。

前面講過Elasticsearch安裝和基本使用方法,小夥伴們可以翻翻歷史文章,或在

https://nowjava.com/article/31176

【Elasticsearch 安裝與增刪改查的使用】

這裡查看。

ES內置分詞器

Standard Analyzer - 默認分詞器,按詞切分,小寫處理Simple Analyzer - 按照非字母切分(符號被過濾), 小寫處理Stop Analyzer - 小寫處理,停用詞過濾(the,a,is)Whitespace Analyzer - 按照空格切分,不轉小寫Keyword Analyzer - 不分詞,直接將輸入當作輸出Patter Analyzer - 正則表達式,默認\W+(非字符分割)Language - 提供了30多種常見語言的分詞器Customer Analyzer 自定義分詞器看概念太虛了!一定要動手實操才有用!我們可以用_analyze進行分析,會輸出分詞後的結果,舉兩個例子吧!其他的你也要自己課後動手試試哦!

#默認分詞器 按詞切分 小寫處理

GET _analyze

{

"analyzer": "standard",

"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."

}

#可以發現停用詞被去掉了

GET _analyze

{

"analyzer": "stop",

"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."

}

中文擴展分詞器

蘋果明明一個詞,不想讓它分為兩個呀!中文分詞在所有搜尋引擎中都是一個很大的難點,中文的句子應該是切分成一個個的詞,但是一句中文,在不同的上下文,其實是不同的理解,例如: 這個蘋果,不大好吃/這個蘋果,不大,好吃。

有一些比較不錯的中文分詞插件:IK、THULAC等。我們可以試試用IK進行中文分詞。

#安裝插件

https://nowjava.com/download/31278

在plugins目錄下創建analysis-ik目錄 解壓zip包到當前目錄 重啟ES

#查看插件

bin/elasticsearch-plugin list

#查看安裝的插件

GET http://localhost:9200/_cat/plugins?v

IK分詞器:支持自定義詞庫、支持熱更新分詞字典

ik_max_word: 會將文本做最細粒度的拆分,比如會將「這個蘋果不大好吃」拆分為"這個,蘋果,不大好,不大,好吃"等,會窮盡各種可能的組合;ik_smart: 會做最粗粒度的拆分,比如會將「這個蘋果不大好吃」拆分為"這個,蘋果,不大,好吃"curl -X GET "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d'

{

"analyzer" : "ik_max_word",

"text" : "這個蘋果不大好吃"

}

如何使用分詞器

列舉了很多的分詞器,那麼在實際中該如何使用呢?看看下面這個代碼演示就懂啦!

# 創建索引時候指定某個欄位的分詞器

PUT iktest

{

"mappings": {

"properties": {

"content": {

"type": "text",

"analyzer": "ik_smart"

}

}

}

}

# 插入一條文檔

PUT iktest/_doc/1

{

"content":"這個蘋果不大好吃"

}

# 測試分詞效果

GET /iktest/_analyze

{

"field": "content",

"text": "這個蘋果不大好吃"

}

--

知識分享,時代前行!~~ 時代Java還有更多好文章……請查看歷史和官網。

相關焦點

  • ElasticSearch-hard插件及IK分詞器安裝
    操作步驟如下圖:IK分詞器安裝:我們先來看看什麼式分詞?為什麼需要使用分詞器?分詞:即把一段中文或者別的劃分成一個個的關鍵字,我們在搜索時候會把自己的信息進行詞,會把資料庫中或者索引庫中的數據進行分詞,然後進行一個匹配操作,默認的中文分詞是將每個字看成一個詞,比如"中國的花"會被分為"中","國","的","花",這顯然是不符合要求的,所以我們需要安裝中文分詞器ik來解決這個問題。
  • ElasticSearch 中的中文分詞器以及索引基本操作詳解
    1.ElasticSearch 分詞器介紹1.1 內置分詞器ElasticSearch 核心功能就是數據檢索,首先通過索引將文檔寫入 es。ElasticSearch 中內置了多種分詞器可以供使用。內置分詞器:1.2 中文分詞器在 Es 中,使用較多的中文分詞器是 elasticsearch-analysis-ik,這個是 es 的一個第三方插件,代碼託管在 GitHub 上。
  • ElasticSearch
    、高實時的搜索與數據分析引擎,基於RESTful web接口 2.Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜尋引擎 3.應用場景 3.1 搜索:海量數據的查詢 3.2 日誌數據分析 3.3 實時數據分析1.2 ES和MySQL的區別 • MySQL有事務性,而ElasticSearch沒有事務性
  • 基於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。
  • ElasticSearch最全詳細使用教程:入門、索引管理、映射詳解、索引別名、分詞器、文檔管理、路由、搜索詳解
    2.3 Pattern Replace Character Filter 官網連結:https://www.elastic.co/guide/en/elasticsearch/reference/current
  • 使用Elasticsearch做一個好用的日語搜尋引擎及自動補全 - 計算機...
    最近基於 Elastic Stack 搭建了一個日語搜索服務,發現日文的搜索相比英語和中文,有不少特殊之處,因此記錄下用 Elasticsearch 搭建日語搜尋引擎的一些要點。本文所有的示例,適用於 Elastic 6.X 及 7.X 版本。
  • 一篇搞懂ElasticSearch(附學習腦圖)
    ElasticSearch是一個實時的分布式存儲、搜索和分析的引擎Elasticsearch is a real-time, distributed storage, search, and analytics engine什麼是搜尋引擎?
  • 為什麼Elasticsearch查詢變得這麼慢了?
    默認情況下,所有版本的Elasticsearch都會關閉慢速日誌,因此您必須對群集設置和索引設置進行一些更新。這些示例適用於使用elasticsearch 6.2,但您可以在此處找到所有以前的版本。 只需將$ES_version替換為您正在使用的版本,例如5.5版本設置官網參考:http://t.cn/E7Hq2NG。
  • 嚴選 | Elastic中文社區201903錯題本
    開發最懊悔的事莫過於:自己費盡腦汁、花費了很長時間解決了問題,原來別人在社區或者別的地方早已經給出了更優化的方案。開發最最懊悔的事莫過於:別人已經給出了方案,但是我們仍然在黑暗中苦逼的摸索。上一次錯題本也提及社區彬哥的分享:https://elasticsearch.cn/article/63582) es5.0提供了 Rollover 特性https://elasticsearch.cn/question/10941.2 能否在一個查詢中 查詢兩個條件 在對兩個結果進行除法計算?
  • 這篇實戰攻略,帶你輕鬆入門Elastic search
    什麼是Elasticsearch,為什麼要使用它?Elasticsearch 是一個分布式、RESTful 風格的搜索和數據分析引擎。它基於Lunece實現,使用java語言編寫。Lunece是一個優秀的搜尋引擎庫,但它使用起來非常複雜。
  • Elasticsearch Analyzer
    Elasticsearch內置了10+種分詞器,主要分為三類:Word Oriented Tokenizer、Partial Word Tokenizer和Structured Text Tokenizer。
  • ES——中文分詞以及詞庫擴展
    首先進入elasticsearch的根目錄下執行以下命令安裝插件,版本要和自己電腦安裝的elasticsearch版本對應上,如本人電腦安裝的是6.6.1版本:./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.1/elasticsearch-analysis-ik-6.6.1.zip    檢查下中文分詞是否生效——    標準分詞
  • Elasticsearch實現原理分析
    本文介紹了Elasticsearch的以下原理:是Master/Slave架構,還是Master-less架構?Elasticsearch介紹Elasticsearch的索引(index)是用於組織數據的邏輯命名空間(如資料庫)。Elasticsearch的索引有一個或多個分片(shard)(默認為5)。分片是實際存儲數據的Lucene索引,它本身就是一個搜尋引擎。
  • 在elasticsearch中使用function_score查詢
    /guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-decay四、random_scoring隨機一致性函數,可以隨用戶而變,官方示例:GET /_search{ "query": { "function_score": {
  • Open Distro for Elasticsearch 1.1.0 發布,Elasticsearch 發行版
    Open Distro for Elasticsearch 是 AWS 開源的 Elasticsearch 發行版。可以 GitHub 存儲庫中的發行說明中找到有關增強、bug 修復和更多信息的詳細信息:https://github.com/opendistro-for-elasticsearch新特性此版本中提供一些新的插件,以便集成到開發者的應用程式中,雖然這些插件屬於 alpha 版本。
  • 《Elasticsearch 權威指南》中文版
    在幾十位社區同學的共同努力下,《Elasticsearch 權威指南》的翻譯工作接近尾聲,在線訪問連結如下:
  • ElasticSearch 億級數據檢索案例實戰!
    三、elasticsearch檢索原理3.1 關於ES和Lucene基礎結構談到優化必須能了解組件的基本原理,才容易找到瓶頸所在,以免走多種彎路,先從ES的基礎結構說起(如下圖):一些基本概念:這很慢而且難以擴展:隨著詞項和文檔的數量增加,執行時間也會增加。
  • 嚴選 | Elastic中文社區201902錯題本
    因此,我從2018年4月——至今,每月都會梳理出了Elasticsearch中文社區的精華乾貨——簡稱:Elastic錯題本,問題大多來自Medcl、wood大叔等大牛的精彩回復,結合實戰嚴選的核心問題。放在了GitHub上。
  • 掌握analyze API,一舉搞定 Elasticsearch 分詞難題
    初次接觸 Elasticsearch 的同學經常會遇到分詞相關的難題,比如如下這些場景:為什麼明明有包含搜索關鍵詞的文檔,但結果裡面就沒有相關文檔呢?我存進去的文檔到底被分成哪些詞(term)了?分詞搜尋引擎的核心是倒排索引(這裡不展開講),而倒排索引的基礎就是分詞。所謂分詞可以簡單理解為將一個完整的句子切割為一個個單詞的過程。在 es 中單詞對應英文為 term 。我們簡單看個例子:ES 的倒排索引即是根據分詞後的單詞創建,即我、愛、北京、天安門這4個單詞。