我注意到 ES 意大利語分析器不會詞干長度少于 6 個字符的單詞,這顯然給我的作業帶來了問題。我試圖通過自定義分析器來解決它,但不幸的是沒有成功。所以我在索引中實作了一個 hunspell 分析器,但它的可擴展性不是很強,所以我想保持分析器的演算法。有人對如何解決這個問題有建議嗎?
uj5u.com熱心網友回復:
Elasticsearch 中默認的意大利語詞干提取器不是普通的雪球詞干提取器,而是一個名為 light_italian的輕型版本。我能夠重現它不會阻止一些短于 6 個字符的標記,如您所描述的:
POST /_analyze
{
"analyzer": "italian",
"text": "pronto propio logie logia morte"
}
但是 Elasticsearch 包含另一個意大利語詞干詞過濾器,稱為italian對這些詞進行詞干提取。您可以使用以下代碼對其進行測驗:
PUT /my-italian-stemmer-index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"my_stemmer"
]
}
},
"filter": {
"my_stemmer": {
"type": "stemmer",
"language": "italian"
}
}
}
}
}
POST /my-italian-stemmer-index/_analyze
{
"analyzer": "my_analyzer",
"text": "pronto propio logie logia morte"
}
如果你想使用它,你應該重建原來的意大利語分析器并換掉令牌過濾器:
PUT /italian_example
{
"settings": {
"analysis": {
"filter": {
"italian_elision": {
"type": "elision",
"articles": [
"c", "l", "all", "dall", "dell",
"nell", "sull", "coll", "pell",
"gl", "agl", "dagl", "degl", "negl",
"sugl", "un", "m", "t", "s", "v", "d"
],
"articles_case": true
},
"italian_stop": {
"type": "stop",
"stopwords": "_italian_"
},
"italian_keywords": {
"type": "keyword_marker",
"keywords": ["esempio"]
},
"italian_stemmer": {
"type": "stemmer",
"language": "italian"
}
},
"analyzer": {
"rebuilt_italian": {
"tokenizer": "standard",
"filter": [
"italian_elision",
"lowercase",
"italian_stop",
"italian_keywords",
"italian_stemmer"
]
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/345196.html
標籤:弹性搜索
