Elasticsearch hunspell过分切词

时间:2015-10-07 13:54:32

标签: elasticsearch hunspell

以下面的映射为例:

app.set('query parser', 'simple') // or 'extended' to use 'qs' module

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

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

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

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

1 个答案:

答案 0 :(得分:1)

如果您能够提出要保留的单词列表,那么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可能会有用。这可以在关键字标记令牌过滤器之前。