Elasticsearch“pattern_replace”,在分析时替换空格

时间:2015-04-26 03:23:42

标签: elasticsearch whitespace tokenize removing-whitespace

基本上我想删除所有空格并将整个字符串标记为单个标记。 (稍后我将使用nGram。)

这是我的索引设置:

"settings": {
 "index": {
  "analysis": {
    "filter": {
      "whitespace_remove": {
        "type": "pattern_replace",
        "pattern": " ",
        "replacement": ""
      }
    },
    "analyzer": {
      "meliuz_analyzer": {
        "filter": [
          "lowercase",
          "whitespace_remove"
        ],
        "type": "custom",
        "tokenizer": "standard"
      }
    }
  }
}

我也尝试了"pattern": " ""pattern": "\\u0020",而不是\\s

但是当我分析文本“beleza na web”时,它仍会创建三个单独的标记:“beleza”,“na”和“web”,而不是一个单独的“belezanaweb”。

1 个答案:

答案 0 :(得分:13)

分析器首先通过对其进行标记来分析字符串,然后应用一系列标记过滤器。您已将tokenizer指定为标准,表示已使用standard tokenizer对输入进行了标记,该keyword tokenizer分别创建了令牌。然后将图案替换过滤器应用于标记。

使用https://codereview.stackexchange.com/questions/69123/ibdesignable-uicheckbox代替您的标准分词器。其余的映射很好。 您可以按以下方式更改映射

"settings": {
 "index": {
  "analysis": {
    "filter": {
      "whitespace_remove": {
        "type": "pattern_replace",
        "pattern": " ",
        "replacement": ""
      }
    },
    "analyzer": {
      "meliuz_analyzer": {
        "filter": [
          "lowercase",
          "whitespace_remove",
          "nGram"
        ],
        "type": "custom",
        "tokenizer": "keyword"
      }
    }
  }
}