最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解

 更新時(shí)間:2023年05月20日 11:52:41   作者:AskaJohnny  
這篇文章主要為大家介紹了Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前置知識(shí)

主要介紹一下 Elasticsearch中 Analyzer 分詞器的構(gòu)成 和一些Es中內(nèi)置的分詞器 以及如何使用它們

es 提供了 analyze api 可以方便我們快速的指定 某個(gè)分詞器 然后對(duì)輸入的text文本進(jìn)行分詞 幫助我們學(xué)習(xí)和實(shí)驗(yàn)分詞器

POST _analyze
{
  "analyzer": "standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]

1.Analyzer

在ES中有很重要的一個(gè)概念就是 分詞,ES的全文檢索也是基于分詞結(jié)合倒排索引做的。所以這一文我們來看下何謂之分詞。如何分詞。

分詞器是專門處理分詞的組件,在很多中間件設(shè)計(jì)中每個(gè)組件的職責(zé)都劃分的很清楚,單一職責(zé)原則,以后改的時(shí)候好擴(kuò)展。

分詞器由三部分組成。

  • Character Filters : 主要對(duì)原文本做處理, 例如 去除 html 標(biāo)簽
  • Tokenizer : 按照規(guī)則 把文本切分為單詞, 也就是分詞
  • Token Filters : 將切分后的單詞 進(jìn)行加工處理, 小寫,刪除stopwords 停頓詞, 增加同義詞 , 擴(kuò)展一些

分詞場(chǎng)景:

  • 數(shù)據(jù)寫入index 的時(shí)候進(jìn)行分詞
  • query 查詢時(shí)候 需要對(duì)查詢文本 進(jìn)行分詞

2.Elasticsearch 內(nèi)置分詞器

在es中有不少內(nèi)置分詞器

  • Standard Analyzer : 默認(rèn)分詞器, 按Unicode文本分割算法拆分 , 轉(zhuǎn)化為小寫 , 支持中文(但是中文按照每個(gè)文字拆分,沒啥意義)
  • Simple Analyzer : 按照非字母切分 并且轉(zhuǎn)化為小寫
  • Stop Analyzer : 和 simple 一樣 但是多了 過濾停用詞(the a is) 默認(rèn)使用 stop token filter 的 _ _ english _ _ 預(yù)定義
  • Whitespace Analyzer : 每當(dāng)遇到 空格的時(shí)候 會(huì)進(jìn)行分詞 , 不會(huì)轉(zhuǎn)小寫
  • Keyword Analyzer : 不分詞 直接將輸入當(dāng)做輸出
  • Patter Analyzer : 正則表達(dá)式
  • Language : 語(yǔ)言分詞器 30多種
  • Customer Analyzer : 自定義分詞器

3. Standard Analyzer

Standard 是es中默認(rèn)的分詞器 , 它是按照 Unicode 文本分割算法去 對(duì)文本進(jìn)行分詞的

POST _analyze
{
  "analyzer": "standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]

3.1 Definition

包括了 轉(zhuǎn)小寫的 token filter 和 stop token filter 去除停頓詞

Tokenizer

  • [Standard Tokenizer]

Token Filters

  • [Standard Token Filter] : 沒用只是作為保留的token filter (The standard token filter currently does nothing. It remains as a placeholder in case some filtering function needs to be added in a future version.)
  • [Lower Case Token Filter] : 轉(zhuǎn)小寫的 token filter
  • [Stop Token Filter] : 停頓詞 token filter 默認(rèn)是沒有開啟

3.2 Configuration

  • max_token_length : 最大的分詞長(zhǎng)度,如果超過此長(zhǎng)度 則直接分詞 default 255
  • stopwords : 預(yù)定義的停頓詞列表 如: _ _ englisth _ _ 或者 停頓詞數(shù)組[] 默認(rèn) none 不設(shè)置
  • stopwords_path : 包含停頓詞的文件路徑

3.3 實(shí)驗(yàn)

// 使用 自定義的分詞器 基于 standard
PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_english_analyzer": {
          "type": "standard", 
          "max_token_length": 5, // 最大詞數(shù)
          "stopwords": "_english_" // 開啟過濾停頓詞 使用 englisth 語(yǔ)法
        }
      }
    }
  }
}
GET my_index/_analyze
{
  "analyzer": "my_english_analyzer",
  "text": "The hellogoodname jack"
}
// 可以看到 最長(zhǎng)5個(gè)字符 就需要進(jìn)行分詞了, 并且停頓詞 the 沒有了
["hello", "goodn", "ame", "jack"]

4. Simple Analyzer

簡(jiǎn)單的分詞器 分詞規(guī)則就是 遇到 非字母的 就分詞, 并且轉(zhuǎn)化為小寫,(lowercase tokennizer )

POST _analyze
{
  "analyzer": "simple",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

4.1 Definition

Tokenizer

  • Lower Case Tokenizer

4.2 Configuation

無配置參數(shù)

4.3 實(shí)驗(yàn)

simple analyzer 分詞器的實(shí)現(xiàn) 就是如下

PUT /simple_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_simple": {
          "tokenizer": "lowercase",
          "filter": [         
          ]
        }
      }
    }
  }
}

5. Stop Analyzer

stop analyzer 和 simple analyzer 一樣, 只是多了 過濾 stop word 的 token filter , 并且默認(rèn)使用 english 停頓詞規(guī)則

POST _analyze
{
  "analyzer": "stop",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
// 可以看到 非字母進(jìn)行分詞 并且轉(zhuǎn)小寫 然后 去除了停頓詞
[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]

5.1 Definition

Tokenizer

  • Lower Case Tokenizer : 轉(zhuǎn)小寫的

Token filters

  • Stop Token Filter : 過濾停頓詞 默認(rèn)使用 規(guī)則 english

5.2 Configuration

  • stopwords : 指定分詞的規(guī)則 默認(rèn) english , 或者分詞的數(shù)組
  • stopwords_path : 指定分詞停頓詞文件

5.3 實(shí)驗(yàn)

如下就是對(duì) Stop Analyzer 的實(shí)現(xiàn) , 先轉(zhuǎn)小寫 后進(jìn)行停頓詞的過濾

PUT /stop_example
{
  "settings": {
    "analysis": {
      "filter": {
        "english_stop": {
          "type":       "stop",
          "stopwords":  "_english_" 
        }
      },
      "analyzer": {
        "rebuilt_stop": {
          "tokenizer": "lowercase",
          "filter": [
            "english_stop"          
          ]
        }
      }
    }
  }
}

設(shè)置 stopwords 參數(shù) 指定過濾的停頓詞列表

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_stop_analyzer": {
          "type": "stop",
          "stopwords": ["the", "over"]
        }
      }
    }
  }
}
POST my_index/_analyze
{
  "analyzer": "my_stop_analyzer",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
[ quick, brown, foxes, jumped, lazy, dog, s, bone ]

6. Whitespace Analyzer

空格 分詞器, 顧名思義 遇到空格就進(jìn)行分詞, 不會(huì)轉(zhuǎn)小寫

POST _analyze
{
  "analyzer": "whitespace",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]

6.1 Definition

Tokenizer

  • Whitespace Tokenizer

6.2 Configuration

無配置

6.3 實(shí)驗(yàn)

whitespace analyzer 的實(shí)現(xiàn)就是如下, 可以根據(jù)實(shí)際情況進(jìn)行 添加 filter

PUT /whitespace_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_whitespace": {
          "tokenizer": "whitespace",
          "filter": [         
          ]
        }
      }
    }
  }
}

7. Keyword Analyzer

很特殊 它不會(huì)進(jìn)行分詞, 怎么輸入 就怎么輸出

POST _analyze
{
  "analyzer": "keyword",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
//注意 這里并沒有進(jìn)行分詞 而是原樣輸出
[ The 2 QUICK Brown-Foxes jumped over the lazy dog's bone. ]

7.1 Definition

Tokennizer

  • Keyword Tokenizer

7.2 Configuration

無配置

7.3 實(shí)驗(yàn)

rebuit 如下 就是 Keyword Analyzer 實(shí)現(xiàn)

PUT /keyword_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_keyword": {
          "tokenizer": "keyword",
          "filter": [         
          ]
        }
      }
    }
  }
}

8. Patter Analyzer

正則表達(dá)式 進(jìn)行拆分 ,注意 正則匹配的是 標(biāo)記, 就是要被分詞的標(biāo)記 默認(rèn)是 按照 \w+ 正則分詞

POST _analyze
{
  "analyzer": "pattern",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
// 默認(rèn)是 按照 \w+ 正則
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

8.1 Definition

Tokennizer

  • Pattern Tokenizer

Token Filters

  • Lower Case Token Filter
  • Stop Token Filter (默認(rèn)未開啟)

8.2 Configuration

patternJava regular expression, defaults to \W+.
flagsJava regular expression.
lowercase轉(zhuǎn)小寫 默認(rèn)開啟 true.
stopwords停頓詞過濾 默認(rèn)none 未開啟 , Defaults to _none_.
stopwords_path停頓詞文件路徑

8.3 實(shí)驗(yàn)

Pattern Analyzer 的實(shí)現(xiàn) 就是如下

PUT /pattern_example
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "split_on_non_word": {
          "type":       "pattern",
          "pattern":    "\\W+" 
        }
      },
      "analyzer": {
        "rebuilt_pattern": {
          "tokenizer": "split_on_non_word",
          "filter": [
            "lowercase"       
          ]
        }
      }
    }
  }
}

9. Language Analyzer

提供了如下 這么多語(yǔ)言分詞器 , 其中 english 也在其中

arabicarmenianbasquebengalibulgariancatalanczechdutchenglishfinnishfrenchgaliciangermanhindihungarianindonesianirishitalianlatvianlithuaniannorwegianportugueseromanianrussiansoranispanishswedishturkish.

GET _analyze
{
  "analyzer": "english",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
[ 2, quick, brown, foxes, jumped, over, lazy, dog, bone ]

10. Customer Analyzer

沒啥好說的 就是當(dāng)提供的 內(nèi)置分詞器不滿足你的需求的時(shí)候 ,你可以結(jié)合 如下3部分

  • Character Filters : 主要對(duì)原文本做處理, 例如 去除 html 標(biāo)簽
  • Tokenizer : 按照規(guī)則 把文本切分為單詞, 也就是分詞
  • Token Filters : 將切分后的單詞 進(jìn)行加工處理, 小寫,刪除stopwords 停頓詞, 增加同義詞 , 擴(kuò)展一些
PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "char_filter": [
            "emoticons" 
          ],
          "tokenizer": "punctuation", 
          "filter": [
            "lowercase",
            "english_stop" 
          ]
        }
      },
      "tokenizer": {
        "punctuation": { 
          "type": "pattern",
          "pattern": "[ .,!?]"
        }
      },
      "char_filter": {
        "emoticons": { 
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      },
      "filter": {
        "english_stop": { 
          "type": "stop",
          "stopwords": "_english_"
        }
      }
    }
  }
}
POST my_index/_analyze
{
  "analyzer": "my_custom_analyzer",
  "text":     "I'm a :) person, and you?"
}
[ i'm, _happy_, person, you ]

總結(jié)

本篇主要介紹了 Elasticsearch 中 的一些 內(nèi)置的 Analyzer 分詞器, 這些內(nèi)置分詞器可能不會(huì)常用,但是如果你能好好梳理一下這些內(nèi)置 分詞器,一定會(huì)對(duì)你理解Analyzer 有很大的幫助, 可以幫助你理解 Character Filters , Tokenizer 和 Token Filters 的用處.

有機(jī)會(huì)再聊聊 一些中文分詞器 如 IKAnalyzer, ICU Analyzer ,Thulac 等等.. 畢竟開發(fā)中 中文分詞器用到更多些

以上就是Elasticsearch Analyzer 內(nèi)置分詞器使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Elasticsearch Analyzer分詞器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java8中方法引用的使用詳解

    Java8中方法引用的使用詳解

    這篇文章主要介紹了Java 8 中的方法引用使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java收集的雪花算法代碼詳解

    Java收集的雪花算法代碼詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)雪花算法的詳細(xì)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • Java?C++題解leetcode消失的兩個(gè)數(shù)字實(shí)例

    Java?C++題解leetcode消失的兩個(gè)數(shù)字實(shí)例

    這篇文章主要介紹了Java?C++題解leetcode消失的兩個(gè)數(shù)字實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Java 詳解循環(huán)屏障CyclicBarrier如何實(shí)現(xiàn)多線程分段等待執(zhí)行完成

    Java 詳解循環(huán)屏障CyclicBarrier如何實(shí)現(xiàn)多線程分段等待執(zhí)行完成

    CyclicBarrier是一個(gè)同步工具類,可以翻譯成循環(huán)屏障,也叫障礙器或同步屏障。CyclicBarrier內(nèi)部有一個(gè)計(jì)數(shù)器count,調(diào)用障礙器的await方法會(huì)使計(jì)數(shù)器count的值減一,當(dāng)計(jì)數(shù)器count的值為0時(shí),表明調(diào)用了await方法線程已經(jīng)達(dá)到了設(shè)置的數(shù)量
    2021-11-11
  • Eclipse如何導(dǎo)入Maven項(xiàng)目詳解(新手初學(xué))

    Eclipse如何導(dǎo)入Maven項(xiàng)目詳解(新手初學(xué))

    這篇文章主要介紹了Eclipse如何導(dǎo)入Maven項(xiàng)目詳解(新手初學(xué)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 128進(jìn)制加密數(shù)據(jù)示例分享

    128進(jìn)制加密數(shù)據(jù)示例分享

    這篇文章主要介紹了128進(jìn)制加密數(shù)據(jù)示例,這里使用JAVA實(shí)現(xiàn),需要的朋友可以參考下
    2014-03-03
  • 使用java實(shí)現(xiàn)telnet-client工具分享

    使用java實(shí)現(xiàn)telnet-client工具分享

    這篇文章主要介紹了使用java實(shí)現(xiàn)telnet-client工具,需要的朋友可以參考下
    2014-03-03
  • Kotlin基本類型自動(dòng)裝箱出現(xiàn)問題解決辦法

    Kotlin基本類型自動(dòng)裝箱出現(xiàn)問題解決辦法

    這篇文章主要介紹了Kotlin基本類型自動(dòng)裝箱出現(xiàn)問題解決辦法的相關(guān)資料,希望通過本文能幫助到大家,讓大家遇到這樣的問題順利解決,需要的朋友可以參考下
    2017-10-10
  • IntelliJ IDEA 熱部署插件JRebel的使用

    IntelliJ IDEA 熱部署插件JRebel的使用

    這篇文章主要介紹了IntelliJ IDEA 熱部署插件JRebel的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • java遞歸法求字符串逆序

    java遞歸法求字符串逆序

    這篇文章主要介紹了java遞歸法求字符串逆序,涉及java遞歸調(diào)用的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

天台县| 突泉县| 五台县| 大方县| 连州市| 乌鲁木齐市| 绥德县| 永昌县| 常山县| 平昌县| 景宁| 汝州市| 将乐县| 枣庄市| 湘潭市| 广元市| 八宿县| 都匀市| 达孜县| 比如县| 县级市| 桐梓县| 清远市| 突泉县| 安顺市| 常山县| 延长县| 长海县| 曲水县| 大安市| 米易县| 福清市| 道真| 张家港市| 吉水县| 嫩江县| 昌吉市| 鄄城县| 两当县| 利辛县| 吐鲁番市|