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。