日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

01.analyzer简介及char_filter组件

發(fā)布時間:2024/2/28 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 01.analyzer简介及char_filter组件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. es的詞分析組件analyzer簡介
      • 1.1 在index的時候如何選擇analyzer
        • 1.1.1. 使用index mapping中對該filed進(jìn)行analysis
        • 1.1.2. default analyzer
        • 1.1.3.使用standard ananlyzer
      • 1.2 在search的時候如何選擇analyzer
        • 1.2.1. 優(yōu)先使用在query中指定的analyzer
        • 1.2.2. 使用index mapping中對該field定義的 search_analyzer
        • 1.2.3. 使用mapping中field定義的analyzer
        • 1.2.4. 使用index setting中定義的 名字為 default_search 的analyzer
        • 1.2.5. 使用index setting中定義的名字為 default 的analyzer
    • 2. analyzer的內(nèi)部結(jié)構(gòu)
    • 3. character filters
      • 1.HTML Strip Character Filter
        • 1.html_strip字符過濾器功能
        • 2.他也允許你配置忽略哪些標(biāo)簽,被忽略的標(biāo)簽將不會被刪除
      • 2.Mapping Character Filter
      • 3.Pattern Replace Character Filter

1. es的詞分析組件analyzer簡介

文檔在進(jìn)行存儲之前,先要進(jìn)行處理,同樣的,在查詢之前query也要進(jìn)行處理,這些處理主要是分詞,去掉停用詞等信息,這些功能能都是由一個叫analyzer的組件來實現(xiàn)的。

1.1 在index的時候如何選擇analyzer

在進(jìn)行index的時候,
1.首先會使用 index mapping中對該filed定義的analyzer進(jìn)行analysis
2.當(dāng)對應(yīng)的field沒有定義對應(yīng)的analyzer的時候,會查找在定義index mapping的時候是否有定義對應(yīng)的 名字為 default的的analyzer
3.如果index的setting沒有配置 default analyzer,那么es會使用默認(rèn)的standard analyzer進(jìn)行處理

1.1.1. 使用index mapping中對該filed進(jìn)行analysis

PUT my_index {"settings": {"analysis": {"analyzer": {"std_english": {"type": "standard","stopwords": "_english_"}}}},"mappings": {"properties": {"title": {"type": "text","analyzer": "std_english"}}} }

像這樣在定義index的時候?qū)δ硞€字段定義了一個analyzer,那么在往這個indices中index數(shù)據(jù)的時候就會使用std_english analyzer.

1.1.2. default analyzer

當(dāng)對應(yīng)的field沒有定義對應(yīng)的analyzer的時候,會查找在定義index mapping的時候是否有定義對應(yīng)的 名字為 default的的analyzer

PUT my_index {"settings": {"analysis": {"analyzer": {"default": {"type": "simple"}}}} }

這樣,在1沒有命中的話會默認(rèn)使用default analyzer.

1.1.3.使用standard ananlyzer

如果index的setting沒有配置 default analyzer,那么es會使用默認(rèn)的standard analyzer進(jìn)行處理

At index time, if no analyzer has been specified, it looks for an analyzer in the index settings called default. Failing that, it defaults to using the standard analyzer.

1.2 在search的時候如何選擇analyzer

在query查詢的時候也會使用analyzer對query進(jìn)行分析處理,具體使用哪個analyzer也是有一定的選擇機(jī)制的。

  • 優(yōu)先使用在query中指定的analyzer
  • 使用index mapping中對該field定義的 search_analyzer
  • 使用mapping中field定義的analyzer
  • 使用index setting中定義的 名字為 default_search 的analyzer
  • 使用index setting中定義的名字為 default 的analyzer
  • 使用standard analyzer
  • 注意,這個地方和最新的7.5的文檔敘述有出入,7.5中是3和4調(diào)換了一下位置

    1.2.1. 優(yōu)先使用在query中指定的analyzer

    GET my_index/_search {"query": {"match": {"message": {"query": "Quick foxes","analyzer": "stop"}}} }

    1.2.2. 使用index mapping中對該field定義的 search_analyzer

    PUT my_index {"mappings": {"properties": {"title": {"type": "text","analyzer": "whitespace","search_analyzer": "simple"}}} }

    1.2.3. 使用mapping中field定義的analyzer

    PUT my_index {"mappings": {"properties": {"title": {"type": "text","analyzer": "whitespace"}}} }

    1.2.4. 使用index setting中定義的 名字為 default_search 的analyzer

    PUT my_index {"settings": {"analysis": {"analyzer": {"default": {"type": "simple"},"default_search": {"type": "whitespace"}}}} }

    1.2.5. 使用index setting中定義的名字為 default 的analyzer

    PUT my_index {"settings": {"analysis": {"analyzer": {"default": {"type": "simple"}}}} }

    2. analyzer的內(nèi)部結(jié)構(gòu)

    實際上analyzer是由三個部分構(gòu)成

  • character filters:
    character filter 的輸入是原始的文本text,然后他進(jìn)行一些addding,removing,change characters 操作
  • tokenizers:
    tokenizer的輸入是character filter 處理過的字符,他的功能是根據(jù)一定的規(guī)則或者詞庫進(jìn)行分詞,將text切成一個一個獨(dú)立的token /term (詞),輸出是一個詞的流token stream
  • token filters
    token filter 這個名字也直接表達(dá)了含義,就是對token stream 進(jìn)行了add ,remove, change操作
  • 用戶可以使用者三個部分來自定義analyzer,在下面的部分我們會分別介紹這三個部分,character filters,tokenizers,token filters。

    3. character filters

    ??character filter 的輸入是原始的文本text,然后他進(jìn)行一些addding,removing,change characters 操作。比如將1,2,3,4轉(zhuǎn)成漢語中的一,二,三這種。一個analyzer可以沒有character,也可以有多個character filter。目前es自帶的character filter 有下面這些

  • HTML Strip Character Filter : 過濾html標(biāo)簽并進(jìn)行替換
  • Mapping Character Filter : 自定義一個map映射,可以進(jìn)行一些自定義的替換
  • Pattern Replace Character Filter : 可以按照模式匹配將一些字符串替換為想要的字符
  • 1.HTML Strip Character Filter

    1.html_strip字符過濾器功能

    從文本中剝離HTML元素,并用其解碼值替換HTML實體(例如,將&替換為&)。

    在 HTML 中,某些字符是預(yù)留的。
    在 HTML 中不能使用小于號(<)和大于號(>),這是因為瀏覽器會誤認(rèn)為它們是標(biāo)簽。
    如果希望正確地顯示預(yù)留字符,我們必須在 HTML 源代碼中使用字符實體(character entities)。 字符實體類似這樣:
    &entity_name;

    &#entity_number;
    如需顯示小于號,我們必須這樣寫:< 或 < 或 <

    樣例一

    POST _analyze {"tokenizer": "keyword","char_filter": [ "html_strip" ],"text": "<p>I&apos;m so &amp; <b>happy</b>!</p>" }返回 {"tokens" : [{"token" : """ I'm so & happy! ""","start_offset" : 0,"end_offset" : 38,"type" : "word","position" : 0}] }

    2.他也允許你配置忽略哪些標(biāo)簽,被忽略的標(biāo)簽將不會被刪除

    樣例

    PUT my_index {"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "keyword","char_filter": ["my_char_filter"]}},"char_filter": {"my_char_filter": {"type": "html_strip","escaped_tags": ["b"]}}}} }POST my_index/_analyze {"analyzer": "my_analyzer","text": "<p>I&apos;m so <b>happy</b>!</p>" }返回 {"tokens" : [{"token" : """ I'm so <b>happy</b>! ""","start_offset" : 0,"end_offset" : 32,"type" : "word","position" : 0}] }

    2.Mapping Character Filter

    映射字符過濾器接受鍵和值的映射。每當(dāng)遇到與鍵相同的字符串時,它將用與該鍵關(guān)聯(lián)的值替換它們。
    匹配是貪婪的;在給定點(diǎn)匹配的最長模式會獲勝。允許替換為空字符串。
    所以mapping char_filter 不像html_strip那樣拆箱即可用,必須先進(jìn)性配置才能使用mapping char_filter
    mapping char_fliter有兩個屬性可以配置
    1.mappings:數(shù)組類型,數(shù)組中的每一個元素都是key=>value
    2.mappings_path: 一個path,用于使用文件存儲key=>value的情況

    PUT analyze_test {"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "keyword","char_filter": "mapping_char_filter"}},"char_filter": {"mapping_char_filter":{"type":"mapping","mappings":["a => aa","b => e","oo => kkm"]}}}} }POST analyze_test/_analyze {"analyzer":"my_analyzer","text":"a good name is you be" }返回 {"tokens" : [{"token" : "aa gkkmd naame is you ee","start_offset" : 0,"end_offset" : 21,"type" : "word","position" : 0}] }

    3.Pattern Replace Character Filter

    pattern_replace字符過濾器使用正則表達(dá)式來匹配應(yīng)用指定的替換字符串替換的字符。替換字符串可以引用正則表達(dá)式中的捕獲組。
    同樣 pattern_replace char_filter也是先配置后使用,有三個屬性
    1.pattern: 一個java pattern
    2.replacement: 被替換成的字符串
    3.flags: java 正則的flag參數(shù) “CASE_INSENSITIVE|COMMENTS”

    樣例

    PUT my_index {"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "keyword","char_filter": ["my_char_filter"]}},"char_filter": {"my_char_filter": {"type": "pattern_replace","pattern": "(\\d+)-(?=\\d)","replacement": "$1_"}}}} }POST my_index/_analyze {"analyzer": "my_analyzer","text": "My credit card is 123-456-789" }

    改變了原來的文本有可能導(dǎo)致高亮有些問題,高亮位置顯示的有可能不對不對。

    總結(jié)

    以上是生活随笔為你收集整理的01.analyzer简介及char_filter组件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。