Elasticsearch hunspell 切词太多

Elasticsearch hunspell cuts words too much

以下列映射为例:

PUT /test
{
  "settings": {
    "analysis": {
      "filter": {
        "my_hunspell": {
          "type": "hunspell",
          "language": "en_GB"
        }
      },
      "analyzer": {
        "my_test": {
          "type" : "custom",
          "tokenizer": "lowercase",
          "filter": ["my_hunspell"]
        }
      }
    }
  }
}

我已经从 Mozilla 官方页面下载了 hunspell 词典。

现在的问题是一些词,比如啤酒被过度分析了。以下查询将啤酒转化为蜜蜂,这不完全正确?

POST /test/_analyze?analyzer=my_test&text=beer

{
   "tokens": [
      {
         "token": "bee",
         "start_offset": 0,
         "end_offset": 4,
         "type": "word",
         "position": 1
      }
   ]
}

Hunspell 语法很难理解。可以做些什么来避免这种行为?是否可以保留一些单词或添加一些规则?

如果您可以提出要保留的单词列表,那么 Keyword Marker Token Filter 可能值得研究。看起来这会防止你想要保护的词被阻止。您更新后的分析器可能类似于:

{
  "settings": {
    "analysis": {
      "filter": {
        "my_hunspell": {
          "type": "hunspell",
          "language": "en_GB"
        },
        "protect_my_words": {
          "type": "keyword_marker",
          "keywords_path": <PATH TO TEXT FILE WITH THE WORDS>
        }
      },
      "analyzer": {
        "my_test": {
          "type" : "custom",
          "tokenizer": "lowercase",
          "filter": ["protect_my_words", "my_hunspell"]
        }
      }
    }
  }
}

还有 Pattern Replace Token Filter 如果您确实想要转换特定的单词或模式,它可能会很有用。这可以在关键字标记标记过滤器之前。