0

以以下映射为例:

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 语法很难理解。可以做些什么来避免这种行为?是否可以保留一些单词或添加一些规则?

4

1 回答 1

1

如果您可以提出要保留的单词列表,那么关键字标记标记过滤器可能值得研究。看起来这会阻止您想要保护的单词不被阻止。您更新的分析器可能类似于:

{
  "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"]
        }
      }
    }
  }
}

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

于 2015-10-07T20:05:09.290 回答