ElasticSearch文本分析(一)
文章目錄
- ElasticSearch文本分析(一)
- 概述
- 分詞
- 歸一化
- 自定義文本分析器
- 概念
- 分析器的剖析
- 字符過濾器
- 分詞器
- 分詞過濾器
- 索引和查詢分析
- 詞干提取
- 詞干提取分詞過濾器
- 算法詞干提取器
- 詞典詞干提取器
- 配置文本分析
- 測試分析器
- 配置內(nèi)部分析其
- 內(nèi)部分析器參考
- 指紋分析器
- 示例輸出
- 配置
- 配置例子
- 定義
- `keyword`分析器
- 例子輸出
- 配置
- 定義
- 語言分析器
- 模式分析器
- 例子輸出
- 配置
- 配置實(shí)例
- 駝峰分詞器
- 定義
- 簡單的分析器
- 例子
- 定義
- 自定義
- 標(biāo)準(zhǔn)分析器
- 例子
- 配置
- 配置例子
- 定義
- 停用詞分析器
- 例子:
- 配置
- 配置例子:
- 定義
- 空格分析器
- 例子
- 配置
- 定義
ElasticSearch文本分析(一)
文本分析是將非結(jié)構(gòu)化文本(如電子郵件的正文或產(chǎn)品描述)轉(zhuǎn)換為針對搜索進(jìn)行優(yōu)化的結(jié)構(gòu)化格式的過程。
ElasticSearch在索引或者檢索字段的時候執(zhí)行本文分析。
但是,如果您使用文本字段或文本搜索未按預(yù)期返回結(jié)果,則配置文本分析通常會有所幫助。如果您使用 Elasticsearch 來執(zhí)行以下操作,您還應(yīng)該查看分析配置:
- 構(gòu)建搜索引擎
- 挖掘非結(jié)構(gòu)化數(shù)據(jù)
- 微調(diào)特定語言的搜索
- 進(jìn)行詞典或語言研究
概述
文本分析能夠讓ElasticSearch執(zhí)行全文檢索,然后返回匹配到的所以相關(guān)結(jié)果而不僅僅是完全匹配。
如果您搜索 Quick fox jumps,您可能想要包含 A quick brown fox jumps over the lazy dog 的文檔,并且您可能還想要包含相關(guān)詞(如 fast fox 或 foxes jumps)的文檔。
分詞
分析器通過分詞使得全文檢索成為可能:將文本分解成更小的塊,成為標(biāo)記。大多數(shù)情況下,這些標(biāo)記是單獨(dú)的詞。
如果你將短語the quick brown fox jumps作為一個單獨(dú)的字符串進(jìn)行索引,那么用戶通過quick fox搜索將會匹配不到任何文檔。但是,如果對短語進(jìn)行標(biāo)記并分別為每個單詞建立索引,則可以單獨(dú)查找查詢字符串中的詞匯。這意味著可以通過搜索 quick fox、fox brown 或其他變體來匹配它們。
歸一化
分詞支持對單個短語進(jìn)行匹配,但每個標(biāo)記仍按字面匹配。這就意味著:
- 搜索 Quick 不會匹配 quick,即使您可能希望其中一個詞與另一個詞匹配
- 盡管 fox 和 foxes 共享同一個詞根,但搜索 foxes 不會匹配 fox,反之亦然。
- 對跳躍的jumps與leaps不匹配。雖然它們不共享一個詞根,但它們是同義詞并具有相似的含義。
為了解決這些問題,文本分析可以將這些標(biāo)記規(guī)范化為標(biāo)準(zhǔn)格式。這允許您匹配與搜索詞不完全相同但足夠相似以仍然相關(guān)的標(biāo)記。例如:
- Quick可以變成小寫quick
- Foxes 可以被截斷,也可以簡化為它的詞根:fox。
- jump 和leap 是同義詞,可以索引為一個詞:jump。
為確保搜索詞按預(yù)期匹配這些詞,您可以對查詢字符串應(yīng)用相同的分詞和規(guī)范化規(guī)則。例如,搜索 Foxes jump 可以標(biāo)準(zhǔn)化為搜索 fox jump。
自定義文本分析器
文本分析由分析器執(zhí)行,分析器是一組管理整個過程的規(guī)則。
Elasticsearch 包含一個默認(rèn)分析器,稱為標(biāo)準(zhǔn)分析器,它適用于大多數(shù)開箱即用的用例。
如果您想定制您的搜索體驗,您可以選擇不同的內(nèi)置分析器,甚至可以配置自定義分析器。自定義分析器可讓您控制分析過程的每個步驟,包括:
- 分詞前對文本的更改
- 文本如何轉(zhuǎn)換為標(biāo)記
- 在索引或搜索之前對tokens 所做的規(guī)范化更改
概念
分析器的剖析
一個分析器無論是內(nèi)置的還是自定義的,他只是一個包,這個包包含了三個級別的構(gòu)建塊,分別是:字符過濾器、分詞器和分詞過濾器。
內(nèi)置分析器將這些構(gòu)建塊預(yù)先打包成適用于不同語言和文本類型的分析器。 Elasticsearch 還公開了各個構(gòu)建塊,以便將它們組合起來定義新的自定義分析器。
字符過濾器
符過濾器以字符流的形式接收原始文本,并可以通過添加、刪除或更改字符來轉(zhuǎn)換流。例如,字符過濾器可用于將印度-阿拉伯?dāng)?shù)字 (? ???????? ? ) 轉(zhuǎn)換為其阿拉伯-拉丁數(shù)字 (0123456789),或從流中去除 等 HTML 元素。
分析器可能有零個或多個字符過濾器,它們按順序應(yīng)用。
分詞器
分詞器接收字符流,將其分解為單獨(dú)的標(biāo)記(通常是單個單詞),然后輸出分詞流。例如,空格分詞器在看到任何空格時將文本分解。它會轉(zhuǎn)換文本Quick brown fox!進(jìn)入術(shù)語[Quick, brown, fox!]
分詞器還負(fù)責(zé)記錄每個術(shù)語的順序或位置以及該術(shù)語所代表的原始單詞的開始和結(jié)束字符偏移量。
一個分析器必須只有一個分詞器。
分詞過濾器
分詞過濾器接收分詞流并可以添加、刪除或更改分詞。例如,小寫分詞過濾器將所有分詞轉(zhuǎn)換為小寫,停止標(biāo)記過濾器從標(biāo)分詞流中刪除常用詞(停止詞),而同義詞分詞過濾器將同義詞引入分詞流。
分詞過濾器不允許更改每個分詞的位置或字符偏移量。
分析器可能有零個或多個分詞過濾器,它們按順序應(yīng)用。
索引和查詢分析
文本分析器在以下兩種情況下發(fā)生:
- 索引的時候:當(dāng)一個文檔被索引的時候,任何text字段值都會被分析
- 檢索的時候:當(dāng)在text字段上運(yùn)行全文檢索的時候,查詢的字符串會被分析
每次使用的分析器或分析規(guī)則集分別稱為索引分析器或搜索分析器。
詞干提取
詞干提取是將一個單詞還原為其詞根的過程。這可以確保在搜索過程中匹配不同的單詞。
例如walking和walked被詞干提取相同的詞根walk。一旦被詞干提取,在搜索中出現(xiàn)任何一個單詞,都將會匹配。
詞干提取取決于語言,但是通常涉及到刪除單詞的前綴和后綴。
在大多數(shù)場景下,被詞干提取到的詞根可能不是一個真正的單詞。例如jumping和jumpiness這兩個單詞提取的詞根為jumpi,但是jumpi不是一個正確的單詞,但是它不影響查詢。如果所有的單詞的詞根來源于同一個單詞,則都會被匹配。
詞干提取分詞過濾器
在ElasticSearch中,詞干提取是有分詞過濾器出來的。這些分詞過濾器可以根據(jù)詞干方式進(jìn)行分類:
- 算法詞干分析器:基于規(guī)則集提取詞干
- 詞典詞干分析器:通過在詞典中查找詞干來提取詞干
因為詞干提取會改變分詞,所以我們推薦在索引和查詢分析的時候使用相同的詞干提取分詞過濾器。
算法詞干提取器
算法詞干提取對每個詞應(yīng)用一系列規(guī)則以將他們簡化為詞根的形式。例如對于英文算法詞干提取器可能移除復(fù)數(shù)單詞的-s和-es后綴。
算法詞干提取器有幾個優(yōu)點(diǎn):
- 他們需要很少的配置。通常可以開箱即用
- 他們使用很少的內(nèi)存
- 他們通常比詞典詞干提取器更快
然后,大多數(shù)的算法詞干提取器只能改變一個詞現(xiàn)有的文本。這就意味著他們可能不適用于不包含詞根的不規(guī)則形式的單詞,例如:
- be, are, and am
- mouse and mice
- foot and feet
以下分詞過濾器使用了算法詞干提取器:
- stemmer:stemmer提供了多種語言的詞干提取器。
- kstem:結(jié)合了算法詞干提取和內(nèi)部詞典的英文詞干提取器
- porter_stem:我們推薦的算法詞干提取器
- snowball:它對多種語言使用了基于Snowball-base的詞干提取規(guī)則
詞典詞干提取器
詞典詞干提取器需要在提供的詞典中查看單詞,用查找的單詞替換為詞干提取的單詞。
理論上,詞典詞干提取器非常適合:
- 詞干提取不規(guī)則單詞
- 區(qū)分拼寫相似但概念上不相關(guān)的單詞,例如:
- organ and organization
- broker and broken
在實(shí)踐中,算法詞干提取性能總是優(yōu)于詞典詞干提起。因為詞典詞干提起器具有以下確定:
- 詞典的質(zhì)量:詞典詞干提取完全的好壞依賴于詞典。想要工作的很好,那么這些詞典就必須包含大量單詞、定期更新并且跟隨語言而變化。通常,當(dāng)字典可用時,它是不完整的,其中的一些條目已經(jīng)過時了。
- 大小與性能:字典詞干分析器必須將其字典中的所有單詞、前綴和后綴加載到內(nèi)存中。這可能會使用大量 RAM。去除前綴和后綴的低質(zhì)量詞典也可能效率較低,這會顯著減慢詞干提取過程。
你可以使用hunspell分詞過濾器來執(zhí)行詞典詞干提取。
提示:如果可用,我們推薦你使用hunspell之前使用算法詞干提起器。
配置文本分析
默認(rèn)情況下。ElasticSearch使用standard analyzer作為所有文本分析的分析器。standard分析器讓你開箱即用,并且支持了很多種自然語言和示例。如果你選擇使用standard分析器,將不需要任何配置。
如果standard分析器不滿足你的需求,你可以查看和測試ElasticSearch中其他的內(nèi)置分析器。內(nèi)部分析器不需要配置,但是一些支持的可選配置可以調(diào)整他們的行為。例如你可以配置具有刪除自定義停用詞列表的standard分析器.
如果內(nèi)部分析其也不滿足你的需求,你可以測試和創(chuàng)建一個自定義的分析器。
測試分析器
analyzer API是查看分析器生成術(shù)語的寶貴工具。
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "whitespace","text": "The quick brown fox." } 'API 返回以下響應(yīng):
{"tokens": [{"token": "The","start_offset": 0,"end_offset": 3,"type": "word","position": 0},{"token": "quick","start_offset": 4,"end_offset": 9,"type": "word","position": 1},{"token": "brown","start_offset": 10,"end_offset": 15,"type": "word","position": 2},{"token": "fox.","start_offset": 16,"end_offset": 20,"type": "word","position": 3}] }你也可以用組合方式測試:
-
分詞器
-
0個或者多個分詞過濾器
-
0個或者多個字符過濾器
以上API響應(yīng)值為:
{"tokens": [{"token": "is","start_offset": 0,"end_offset": 2,"type": "<ALPHANUM>","position": 0},{"token": "this","start_offset": 3,"end_offset": 7,"type": "<ALPHANUM>","position": 1},{"token": "deja","start_offset": 8,"end_offset": 12,"type": "<ALPHANUM>","position": 2},{"token": "vu","start_offset": 13,"end_offset": 15,"type": "<ALPHANUM>","position": 3}] }提示:從分析器輸出的結(jié)果可以看到,分析器不僅將單詞轉(zhuǎn)換成了術(shù)語,并且他們還記錄了每個術(shù)語的順序和對應(yīng)位置,以及在原文中術(shù)語的開始和結(jié)束字符的偏移量。
或者,在特定索引上運(yùn)行分析 API 時可以引用自定義分析器:
curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"std_folded": { "type": "custom","tokenizer": "standard","filter": ["lowercase","asciifolding"]}}}},"mappings": {"properties": {"my_text": {"type": "text","analyzer": "std_folded" }}} } ' curl -X GET "localhost:9200/my-index-000001/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "std_folded", "text": "Is this déjà vu?" } ' curl -X GET "localhost:9200/my-index-000001/_analyze?pretty" -H 'Content-Type: application/json' -d' {"field": "my_text", "text": "Is this déjà vu?" } 'API 返回以下響應(yīng):
{"tokens": [{"token": "is","start_offset": 0,"end_offset": 2,"type": "<ALPHANUM>","position": 0},{"token": "this","start_offset": 3,"end_offset": 7,"type": "<ALPHANUM>","position": 1},{"token": "deja","start_offset": 8,"end_offset": 12,"type": "<ALPHANUM>","position": 2},{"token": "vu","start_offset": 13,"end_offset": 15,"type": "<ALPHANUM>","position": 3}] }配置內(nèi)部分析其
內(nèi)部分析可以直接使用而不需要任何配置。然而他們中的一些支持可選的配置來改變他們的行為。例如,standard分析器支持配置停用詞列表:
curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"std_english": { "type": "standard","stopwords": "_english_"}}}},"mappings": {"properties": {"my_text": {"type": "text","analyzer": "standard", "fields": {"english": {"type": "text","analyzer": "std_english" }}}}} } ' curl -X POST "localhost:9200/my-index-000001/_analyze?pretty" -H 'Content-Type: application/json' -d' {"field": "my_text", "text": "The old brown cow" } ' curl -X POST "localhost:9200/my-index-000001/_analyze?pretty" -H 'Content-Type: application/json' -d' {"field": "my_text.english", "text": "The old brown cow" } '內(nèi)部分析器參考
指紋分析器
指紋分析器實(shí)現(xiàn)了指紋算法,OpenRefine使用這個算法來協(xié)調(diào)集群。
輸入小寫的文本,規(guī)范化以刪除擴(kuò)展字符串、排序、去重并連接成一個獨(dú)立的分詞,如果配置了停用詞列表,停用詞也將被移除。
示例輸出
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "fingerprint","text": "Yes yes, G?del said this sentence is consistent and." } '上面的句子將產(chǎn)生以下單個術(shù)語:
[ and consistent godel is said sentence this yes ]配置
| max_output_size | 最大分詞大小。默認(rèn)為 255。大于此大小的分詞將被丟棄。 |
| stopwords | 預(yù)定義的停用詞列表,如 english 或包含停用詞列表的數(shù)組。默認(rèn)為 none。 |
| stopwords_path | 包含停用詞的文件的路徑。 |
有關(guān)停用詞配置的更多信息,請參閱停止分詞過濾器。
配置例子
curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"my_fingerprint_analyzer": {"type": "fingerprint","stopwords": "_english_"}}}} } ' curl -X POST "localhost:9200/my-index-000001/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "my_fingerprint_analyzer","text": "Yes yes, G?del said this sentence is consistent and." } '上面的例子產(chǎn)生以下術(shù)語:
[ consistent godel said sentence yes ]定義
指紋分詞器包括:
- Tokenizer:Standard Tokenizer標(biāo)準(zhǔn)分詞器
- Token Filters (按順序):
- Lower Case Token Filter
- ASCII folding
- Stop Token Filter(默認(rèn)關(guān)閉)
- Fingerprint
如果您需要在配置參數(shù)之外自定義指紋分析器,那么您需要將其重新創(chuàng)建為自定義分析器并對其進(jìn)行修改,通常是通過添加分詞過濾器。這將重新創(chuàng)建內(nèi)置指紋分析器,您可以將其用作進(jìn)一步自定義的起點(diǎn):
curl -X PUT "localhost:9200/fingerprint_example?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"rebuilt_fingerprint": {"tokenizer": "standard","filter": ["lowercase","asciifolding","fingerprint"]}}}} } 'keyword分析器
關(guān)鍵字分析器是一個“noop”分析器,它將整個輸入字符串作為單個分詞返回。
例子輸出
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "keyword","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog\u0027s bone." } '上面的句子將產(chǎn)生以下單個術(shù)語:
[ The 2 QUICK Brown-Foxes jumped over the lazy dog's bone. ]配置
keyword不需要任何配置
定義
keyword分析器包含:
- Tokenizer:keyword tokenizer
如果您需要自定義關(guān)鍵字分析器,那么您需要將其重新創(chuàng)建為自定義分析器并對其進(jìn)行修改,通常是通過添加標(biāo)記過濾器。通常,當(dāng)您想要不拆分為標(biāo)記的字符串時,您應(yīng)該更喜歡 Keyword 類型,但以防萬一,這將重新創(chuàng)建內(nèi)置關(guān)鍵字分析器,您可以將其用作進(jìn)一步自定義的起點(diǎn):
curl -X PUT "localhost:9200/keyword_example?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"rebuilt_keyword": {"tokenizer": "keyword","filter": [ ]}}}} } '語言分析器
一組旨在分析特定語言文本的分析器。支持以下類型:阿拉伯語、亞美尼亞語、巴斯克語、孟加拉語、巴西語、保加利亞語、加泰羅尼亞語、捷克語、捷克語、丹麥語、荷蘭語、英語、愛沙尼亞語、芬蘭語、法語、加利西亞語、德語、希臘語、印地語、匈牙利語、印度尼西亞語、愛爾蘭語、意大利語、拉脫維亞語、立陶宛語、挪威語、波斯語、葡萄牙語、羅馬尼亞語、俄語、索拉尼語、西班牙語、瑞典語、土耳其語、泰語。
模式分析器
模式分析器使用正則表達(dá)式將文本拆分為術(shù)語。正則表達(dá)式應(yīng)該匹配分詞分隔符而不是分詞本身。正則表達(dá)式默認(rèn)為 \W+(或所有非單詞字符)。
提示:小心病態(tài)的正則表達(dá)式,模式分析器使用java正則表達(dá)式。一個寫的不好的正則可能會拖慢性能甚至導(dǎo)致內(nèi)存溢出。
閱讀有關(guān)病態(tài)正則表達(dá)式以及如何避免它們的更多信息。
例子輸出
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "pattern","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone." } '返回響應(yīng):
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]配置
模式分析器接收以下參數(shù):
| flags | Java 正則表達(dá)式標(biāo)志。標(biāo)志應(yīng)該用管道分隔,例如CASE_INSENSITIVE|COMMENTS。 |
| lowercase | 術(shù)語是否應(yīng)該小寫。默認(rèn)為真。 |
| stopwords | 預(yù)定義的停用詞列表,如 english 或包含停用詞列表的數(shù)組。默認(rèn)為 none。 |
| stopwords_path | 包含停用詞的文件的路徑。 |
有關(guān)停用詞配置的更多信息,請參閱停止分詞過濾器。
配置實(shí)例
在此示例中,我們將模式分析器配置為在非單詞字符或下劃線 (\W|_) 上拆分電子郵件地址,并將結(jié)果小寫:
curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"my_email_analyzer": {"type": "pattern","pattern": "\\W|_", "lowercase": true}}}} } ' curl -X POST "localhost:9200/my-index-000001/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "my_email_analyzer","text": "John_Smith@foo-bar.com" } '上面的例子產(chǎn)生以下術(shù)語:
[ john, smith, foo, bar, com ]駝峰分詞器
以下更復(fù)雜的示例將 駝峰文本拆分為分詞:
curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"camel": {"type": "pattern","pattern": "([^\\p{L}\\d]+)|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)|(?<=[\\p{L}&&[^\\p{Lu}]])(?=\\p{Lu})|(?<=\\p{Lu})(?=\\p{Lu}[\\p{L}&&[^\\p{Lu}]])"}}}} } ' curl -X GET "localhost:9200/my-index-000001/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "camel","text": "MooseX::FTPClass2_beta" } '上面的例子產(chǎn)生以下術(shù)語:
[ moose, x, ftp, class, 2, beta ]定義
模式分析器包括:
- Tokenizer:Pattern Tokenizer
- Token Filters:
- Lower Case Token Filter
- Stop Token Filter (disabled by default)
如果您需要在配置參數(shù)之外自定義模式分析器,那么您需要將其重新創(chuàng)建為自定義分析器并對其進(jìn)行修改,通常是通過添加令牌過濾器。這將重新創(chuàng)建內(nèi)置模式分析器,您可以將其用作進(jìn)一步自定義的起點(diǎn):
curl -X PUT "localhost:9200/pattern_example?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"tokenizer": {"split_on_non_word": {"type": "pattern","pattern": "\\W+" }},"analyzer": {"rebuilt_pattern": {"tokenizer": "split_on_non_word","filter": ["lowercase" ]}}}} } '簡單的分析器
簡單的分析器將文本分解為任何非字母字符(如數(shù)字、空格、連字符和撇號)的分詞,丟棄非字母字符,并將大寫改為小寫。
例子
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "simple","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog\u0027s bone." } '簡單分析器解析句子并生成以下分詞:
[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]定義
簡單的分析器由一個分詞器定義:
Tokenizer:Lowercase Tokenizer
自定義
要自定義簡單分析器,請復(fù)制它以創(chuàng)建自定義分析器的基礎(chǔ)。這個自定義分析器可以根據(jù)需要進(jìn)行修改,通常是通過添加分詞過濾器。
curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"my_custom_simple_analyzer": {"tokenizer": "lowercase","filter": [ ]}}}} } '標(biāo)準(zhǔn)分析器
標(biāo)準(zhǔn)分析器是默認(rèn)分析器,如果未指定則使用該分析器。它提供基于語法的標(biāo)記化(基于 Unicode 文本分割算法,如 Unicode 標(biāo)準(zhǔn)附件 #29 中所述)并且適用于大多數(shù)語言。
例子
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "standard","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog`s bone." } '上面的句子將產(chǎn)生以下術(shù)語:
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]配置
| stopwords | 預(yù)定義的停用詞列表,如 english 或包含停用詞列表的數(shù)組。默認(rèn)為 none。 |
| stopwords_path | 包含停用詞的文件的路徑。 |
有關(guān)停用詞配置的更多信息,請參閱停止標(biāo)記過濾器。
配置例子
在此示例中,我們將標(biāo)準(zhǔn)分析器配置為 max_token_length 為 5(用于演示目的),并使用預(yù)定義的英語停用詞列表:
curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"my_english_analyzer": {"type": "standard","max_token_length": 5,"stopwords": "_english_"}}}} } ' curl -X POST "localhost:9200/my-index-000001/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "my_english_analyzer","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog\u0027s bone." } '上面的例子產(chǎn)生以下術(shù)語:
[ 2, quick, brown, foxes, jumpe, d, over, lazy, dog's, bone ]定義
標(biāo)準(zhǔn)分析儀包括:
- Tokenizer:Standard Tokenizer
- Token Filters:
- Lower Case Token Filter
- Stop Token Filter (disabled by default)
如果您需要在配置參數(shù)之外自定義標(biāo)準(zhǔn)分析器,那么您需要將其重新創(chuàng)建為自定義分析器并對其進(jìn)行修改,通常是通過添加令牌過濾器。這將重新創(chuàng)建內(nèi)置標(biāo)準(zhǔn)分析器,您可以將其用作起點(diǎn):
curl -X PUT "localhost:9200/standard_example?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"rebuilt_standard": {"tokenizer": "standard","filter": ["lowercase" ]}}}} } '停用詞分析器
停用分析器與簡單分析器相同,但增加了對刪除停用詞的支持。它默認(rèn)使用 english 停用詞。
例子:
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "stop","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog\u0027s bone." } '上面的句子將產(chǎn)生以下術(shù)語:
[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]配置
| stopwords_path | 包含停用詞的文件的路徑。此路徑相對于 Elasticsearch 配置目錄。 |
有關(guān)停用詞配置的更多信息,請參閱停止標(biāo)記過濾器。
配置例子:
在此示例中,我們將停止分析器配置為使用指定的單詞列表作為停止詞:
curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"my_stop_analyzer": {"type": "stop","stopwords": ["the", "over"]}}}} } ' curl -X POST "localhost:9200/my-index-000001/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "my_stop_analyzer","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog\u0027s bone." } '上面的例子產(chǎn)生以下術(shù)語:
[ quick, brown, foxes, jumped, lazy, dog, s, bone ]定義
- Tokenizer:Lower Case Tokenizer
- Token filters:Stop Token Filter
如果您需要在配置參數(shù)之外自定義停止分析器,那么您需要將其重新創(chuàng)建為自定義分析器并對其進(jìn)行修改,通常是通過添加令牌過濾器。這將重新創(chuàng)建內(nèi)置停止分析器,您可以將其用作進(jìn)一步自定義的起點(diǎn):
curl -X PUT "localhost:9200/stop_example?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"filter": {"english_stop": {"type": "stop","stopwords": "_english_" }},"analyzer": {"rebuilt_stop": {"tokenizer": "lowercase","filter": ["english_stop" ]}}}} } '空格分析器
每當(dāng)遇到空白字符時,空白分析器將文本分解為術(shù)語。
例子
curl -X POST "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d' {"analyzer": "whitespace","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog\u0027s bone." } '上面的句子將產(chǎn)生以下術(shù)語:
[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]配置
空白分析器不用配置。
定義
- Tokenizer:Whitespace Tokenizer
如果您需要自定義空白分析器,那么您需要將其重新創(chuàng)建為自定義分析器并對其進(jìn)行修改,通常是通過添加標(biāo)記過濾器。這將重新創(chuàng)建內(nèi)置的空白分析器,您可以將其用作進(jìn)一步自定義的起點(diǎn):
curl -X PUT "localhost:9200/whitespace_example?pretty" -H 'Content-Type: application/json' -d' {"settings": {"analysis": {"analyzer": {"rebuilt_whitespace": {"tokenizer": "whitespace","filter": [ ]}}}} } '總結(jié)
以上是生活随笔為你收集整理的ElasticSearch文本分析(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泊松分布与指数分布的区别
- 下一篇: adapt和adopt的区别_如何一句话