AliNLP分詞插件(analysis-aliws)是阿里云Elasticsearch(ES)自帶的一個系統默認插件。安裝該插件后會在阿里云ES中集成對應的分析器和分詞器,可用于文檔的分析和檢索。您還可以通過該插件的詞庫配置功能實現詞典的熱更新。
插件介紹
安裝analysis-aliws插件后,阿里云ES默認會集成以下分析器和分詞器。您可以使用這些分析器和分詞器查詢文檔,也可以通過詞庫配置功能自定義更新分詞詞庫。
分析器:aliws(不會截取虛詞、虛詞短語、符號)
分詞器:aliws_tokenizer
詳細信息,請參見使用aliws分析器查詢文檔和配置詞庫。
如果您需要構造自定義分詞器,請參見自定義分詞器構造說明。
前提條件
已安裝analysis-aliws插件(默認未安裝)。安裝方法,請參見安裝或卸載系統默認插件。
使用限制
ES實例的內存要求8 GB及以上。如果內存不滿足要求,請先升級集群,請參見升配集群。
5.x版本和8.x版本實例和內核增強版實例暫不支持安裝analysis-aliws插件,請以控制臺為準。
使用aliws分析器查詢文檔
- 登錄目標阿里云Elasticsearch實例的Kibana控制臺,根據頁面提示進入Kibana主頁。登錄Kibana控制臺的具體操作,請參見登錄Kibana控制臺。說明 本文以阿里云Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際界面為準。
- 在左側導航欄,單擊Dev Tools。
在Console中,執行如下命令創建索引。
7.0以下版本
PUT /index { "mappings": { "fulltext": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } } }
7.0及以上版本
PUT /index { "mappings": { "properties": { "content": { "type": "text", "analyzer": "aliws" } } } }
以上示例創建了一個名稱為index的索引,類型為fulltext(7.x版本為_doc)。包含了一個content屬性,類型為text,并添加了aliws分析器。
預期結果如下。
{ "acknowledged": true, "shards_acknowledged": true, "index": "index" }
執行如下命令,添加文檔。
重要如下命令僅適用于Elasticsearch 7.0以下版本,7.0及以上版本需要將fulltext修改為_doc。
POST /index/fulltext/1 { "content": "I like go to school." }
以上示例創建了名稱為1的文檔,并設置了文檔中的content字段的內容為I like go to school.。
預期結果如下。
{ "_index": "index", "_type": "fulltext", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 2, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
執行如下命令,查詢文檔。
重要如下命令僅適用于Elasticsearch 7.0以下版本,7.0及以上版本需要將fulltext修改為_doc。
GET /index/fulltext/_search { "query": { "match": { "content": "school" } } }
以上示例在所有fulltext類型的文檔中,使用aliws分析器,搜索content字段中包含school的文檔。
預期結果如下。
{ "took": 5, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 0.2876821, "hits": [ { "_index": "index", "_type": "fulltext", "_id": "2", "_score": 0.2876821, "_source": { "content": "I like go to school." } } ] } }
配置詞庫
analysis-aliws插件支持詞庫配置,即上傳自定義的詞典文件aliws_ext_dict.txt。上傳后節點能自動加載詞典文件,實現詞典的熱更新操作(不會觸發集群重啟)。
安裝analysis-aliws插件后,系統不會自帶詞典文件,需要您手動上傳。
在上傳詞典文件前,您需要先準備自定義的詞典文件。詞典文件要求如下:
文件名:必須是aliws_ext_dict.txt。
文件格式:必須是UTF-8格式。
內容:每行一個詞,前后不能有空白字符;需要使用UNIX或Linux的換行符,即每行結尾是
\n
。如果是在Windows系統中生成的文件,需要在Linux機器上使用dos2unix工具將詞典文件處理后再上傳。
- 登錄阿里云Elasticsearch控制臺。
- 在左側導航欄,單擊Elasticsearch實例。
- 進入目標實例。
- 在頂部菜單欄處,選擇資源組和地域。
- 在Elasticsearch實例中單擊目標實例ID。
在左側導航欄,選擇 。
在系統默認插件列表中,單擊analysis-aliws插件右側操作列下的詞庫配置。
在詞庫配置頁面下方,單擊配置。
選擇詞典文件的上傳方式,并上傳詞典文件。
Text文件:單擊上傳txt文件,選擇本地詞典文件進行上傳。
添加OSS文件:輸入Bucket名稱和文件名稱,單擊添加。
請確保Bucket與阿里云Elasticsearch實例在同一地域。源端(OSS)的文件內容發生變化后,需要重新上傳詞典文件才能生效,不支持自動同步更新。
說明analysis-aliws插件僅支持上傳一個詞典文件,如果您需要更新詞典文件,可單擊aliws_ext_dict.txt右側的x圖標,刪除已上傳的詞典文件,重新上傳詞典文件。
單擊保存。
保存后,不會觸發集群重啟,但會觸發集群變更使詞典文件生效,此過程需要10分鐘左右。
說明如果您需要獲取已經上傳過的詞庫文件,可在配置前單擊對應文件的圖標進行下載。
測試分析器
執行如下命令,測試aliws分析器。
GET _analyze
{
"text": "I like go to school.",
"analyzer": "aliws"
}
預期結果如下。
{
"tokens" : [
{
"token" : "i",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"position" : 0
},
{
"token" : "like",
"start_offset" : 2,
"end_offset" : 6,
"type" : "word",
"position" : 2
},
{
"token" : "go",
"start_offset" : 7,
"end_offset" : 9,
"type" : "word",
"position" : 4
},
{
"token" : "school",
"start_offset" : 13,
"end_offset" : 19,
"type" : "word",
"position" : 8
}
]
}
測試分詞器
執行如下命令,測試aliws_tokenizer分詞器。
GET _analyze
{
"text": "I like go to school.",
"tokenizer": "aliws_tokenizer"
}
預期結果如下。
{
"tokens" : [
{
"token" : "I",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"position" : 0
},
{
"token" : " ",
"start_offset" : 1,
"end_offset" : 2,
"type" : "word",
"position" : 1
},
{
"token" : "like",
"start_offset" : 2,
"end_offset" : 6,
"type" : "word",
"position" : 2
},
{
"token" : " ",
"start_offset" : 6,
"end_offset" : 7,
"type" : "word",
"position" : 3
},
{
"token" : "go",
"start_offset" : 7,
"end_offset" : 9,
"type" : "word",
"position" : 4
},
{
"token" : " ",
"start_offset" : 9,
"end_offset" : 10,
"type" : "word",
"position" : 5
},
{
"token" : "to",
"start_offset" : 10,
"end_offset" : 12,
"type" : "word",
"position" : 6
},
{
"token" : " ",
"start_offset" : 12,
"end_offset" : 13,
"type" : "word",
"position" : 7
},
{
"token" : "school",
"start_offset" : 13,
"end_offset" : 19,
"type" : "word",
"position" : 8
},
{
"token" : ".",
"start_offset" : 19,
"end_offset" : 20,
"type" : "word",
"position" : 9
}
]
}
自定義分詞器構造說明
analysis-aliws插件分詞完成后,還會經過filter處理,包括:去詞根filter、LowerCaseFilter、PorterStemFilter和StopFilter。如果您的自定義分詞器上也需要使用這些filter,可在自定義分詞器中加入analysis-aliws插件的分詞器aliws_tokenizer,并根據業務需要增加filter配置,示例如下。其中stopwords內可以添加您業務所需配置的停用詞。
PUT my-index-000001 { "settings": { "analysis": { "filter": { "my_stop": { "type": "stop", "stopwords": [ " ", ",", ".", " ", "a", "的" ] } }, "analyzer": { "my_custom_analyzer": { "type": "custom", "tokenizer": "aliws_tokenizer", "filter": [ "lowercase", "porter_stem", "my_stop" ] } } } } }
說明如果您不需要filter,可自行刪除filter配置。
aliws_tokenizer支持通過synonym構造自定義分詞器,配置方式與IK分詞器一致,詳細信息請參見使用同義詞。
常見問題
使用aliws分詞器進行單詞分詞后,單詞結尾字母缺失。例如:對
iPhone
、Chinese
進行分詞得到的結果是Iphon
、chines
,結尾的e
沒有了。原因:aliws在分詞后有去詞根的filter操作,導致結尾的
e
被去掉了。解決方案:執行下面命令自定義analysis為:my_custom_analyzer,去掉filter部分。
PUT my-index1 { "settings": { "number_of_shards": 1, "analysis": { "analyzer": { "my_custom_analyzer": { "type": "custom", "tokenizer": "aliws_tokenizer" } } } } }
驗證:執行如下命令,測試分詞效果是否符合預期。
GET my-index1/_analyze { "analyzer": "my_custom_analyzer", "text": ["iphone"] }
相關文檔
查看阿里云ES支持的插件,請參見插件配置概述。
調用API安裝系統預置插件,請參見InstallSystemPlugin。
調用API更新analysis-aliws插件的詞典文件,請參見UpdateAliwsDict。
調用API獲取指定阿里云ES實例的插件列表。請參見ListPlugins。