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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es过滤html标签,Elasticsearch 分词器

發布時間:2024/9/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es过滤html标签,Elasticsearch 分词器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在全文搜索(Fulltext Search)中,詞(Term)是一個搜索單元,表示文本中的一個詞,標記(Token)表示在文本字段中出現的詞,由詞的文本、在原始文本中的開始和結束偏移量、以及數據類型等組成。ElasticSearch 把文檔數據寫到倒排索引(Inverted Index)的結構中,倒排索引建立詞(Term)和文檔之間的映射,索引中的數據是面向詞,而不是面向文檔的。分析器(Analyzer)的作用就是分析(Analyse),用于把傳入Lucene的文檔數據轉化為倒排索引,把文本處理成可被搜索的詞。

在ElasticSearch引擎中,分析器的任務是分析(Analyze)文本數據,分析是分詞,規范化文本的意思,其工作流程是:

1.?首先,字符過濾器對分析(analyzed)文本進行過濾和處理,例如從原始文本中移除HTML標記,根據字符映射替換文本等,

2.?過濾之后的文本被分詞器接收,分詞器把文本分割成標記流,也就是一個接一個的標記,

3.然后,標記過濾器對標記流進行過濾處理,例如,移除停用詞,把詞轉換成其詞干形式,把詞轉換成其同義詞等,

4.最終,過濾之后的標記流被存儲在倒排索引中;

5.?ElasticSearch引擎在收到用戶的查詢請求時,會使用分析器對查詢條件進行分析,根據分析的結構,重新構造查詢,以搜索倒排索引,完成全文搜索請求。

無論是內置的分析器(analyzer),還是自定義的分析器(analyzer),都由三種構件塊組成的:character filters,tokenizers和 token filters。

character filters

字符過濾器以字符流的形式接收原始文本,并可以通過添加、刪除或更改字符來轉換該流。

舉例來說,一個字符過濾器可以用來把阿拉伯數字(????????????)?轉成成Arabic-Latin的等價物(0123456789)。

一個分析器可能有0個或多個字符過濾器,它們按順序應用。

Tokenizer (分詞器)

一個分詞器接收一個字符流,并將其拆分成單個token (通常是單個單詞),并輸出一個token流。例如,一個whitespace分詞器當它看到空白的時候就會將文本拆分成token。它會將文本“Quick brown fox!”轉換為[Quick, brown, fox!]

(PS:Tokenizer 負責將文本拆分成單個token ,這里token就指的就是一個一個的單詞。就是一段文本被分割成好幾部分 )

分詞器還負責記錄每個term的順序或位置,以及該term所表示的原單詞的開始和結束字符偏移量。(PS:文本被分詞后的輸出是一個term數組)

一個分析器必須只能有一個分詞器

Token filters (token過濾器)

token過濾器接收token流,并且可能會添加、刪除或更改tokens。

例如,一個lowercase token filter可以將所有的token轉成小寫。stop token filter可以刪除常用的單詞,比如 the 。synonym token filter可以將同義詞引入token流。

不允許token過濾器更改每個token的位置或字符偏移量。

一個分析器可能有0個或多個token過濾器,它們按順序應用。

ES內置分詞器(Tokenizer)

分詞器在字符過濾器之后工作,用于把文本分割成多個標記(Token),一個標記基本上是詞加上一些額外信息,分詞器的處理結果是標記流,它是一個接一個的標記,準備被過濾器處理。標準分析器(Standard)

分析器類型是standard,由標準分詞器(Standard Tokenizer),標準標記過濾器(Standard Token Filter),小寫標記過濾器(Lower Case ????Token Filter)和停用詞標記過濾器(Stopwords Token Filter)組成。參數stopwords用于初始化停用詞列表,默認是空的。

簡單分析器(Simple)

分析器類型是simple,實際上是小寫標記分詞器(Lower Case Tokenizer),在非字母位置上分割文本,并把分詞轉換為小寫形式,功能上是Letter Tokenizer和 Lower Case Token Filter的結合(Combination),但是性能更高,一次性完成兩個任務。

空格分析器(Whitespace)

分析器類型是whitespace,實際上是空格分詞器(Whitespace Tokenizer)。

停用詞分析器(Stopwords)

分析器類型是stop,由小寫分詞器(Lower Case Tokenizer)和停用詞標記過濾器(Stop Token Filter)構成,配置參數stopwords或? ? stopwords_path指定停用詞列表。

雪球分析器(Snowball)

分析器類型是snowball,由標準分詞器(Standard Tokenizer),標準過濾器(Standard Filter),小寫過濾器(Lowercase Filter),停用詞過濾器(Stop Filter)和雪球過濾器(Snowball Filter)構成。參數language用于指定語言。

自定義分析器

分析器類型是custom,允許用戶定制分析器。參數tokenizer 用于指定分詞器,filter用于指定過濾器,char_filter用于指定字符過濾器。

內置分析器實例

這里我們使用的工具是Kibana,我們在這里來操作一下Elasticsearch。如下的事例是ES默認的標準分析器,我們使用_analyze來調試實驗一下。POST?_analyze

{

"analyzer":?"standard",

"text":?"I?am?Chinese."

}

輸出如下結果:{

"tokens"?:?[

{

"token"?:?"i",

"start_offset"?:?0,

"end_offset"?:?1,

"type"?:?"",

"position"?:?0

},

{

"token"?:?"am",

"start_offset"?:?2,

"end_offset"?:?4,

"type"?:?"",

"position"?:?1

},

{

"token"?:?"chinese",

"start_offset"?:?5,

"end_offset"?:?12,

"type"?:?"",

"position"?:?2

}

]

}

而使用空格分析器的話,就會對每個空格進行分割,如下POST?_analyze

{

"analyzer":?"whitespace",

"text":?"I'm?Chinese."

}

輸出結果:{

"tokens"?:?[

{

"token"?:?"I'm",

"start_offset"?:?0,

"end_offset"?:?3,

"type"?:?"word",

"position"?:?0

},

{

"token"?:?"Chinese.",

"start_offset"?:?4,

"end_offset"?:?12,

"type"?:?"word",

"position"?:?1

}

]

}

接下來我們創建一個自定義分析器:#?創建一個自定義分詞器

PUT?test_index_1

{

"settings":?{

"analysis":?{

"analyzer":?{

"my_custom_anaylzer"?:?{

"type"?:?"custom",

"tokenizer"?:?"standard",

"char_filter"?:?["html_strip"],

"filter"?:?["lowercase"]

}

}

}

}

}

以上代碼是創建一個自定義分析器,其中使用分析器是標準分析器,字符串過濾使用的是html_strip(去除里面的html標簽內容),token過濾器用的是lowercase,也就是把取出來的字符都轉成小寫。運行如下事例。POST test_index_1/_analyze

{

"analyzer" : "my_custom_anaylzer",

"text" : "Is this a box ?"

}

輸出結果為:{

"tokens" : [

{

"token" : "is",

"start_offset" : 0,

"end_offset" : 2,

"type" : "",

"position" : 0

},

{

"token" : "this",

"start_offset" : 3,

"end_offset" : 7,

"type" : "",

"position" : 1

},

{

"token" : "a",

"start_offset" : 12,

"end_offset" : 13,

"type" : "",

"position" : 2

},

{

"token" : "box",

"start_offset" : 14,

"end_offset" : 17,

"type" : "",

"position" : 3

}

]

}

參考

總結

以上是生活随笔為你收集整理的es过滤html标签,Elasticsearch 分词器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。