Elasticsearch "pattern_replace",在分析时替换空格

Elasticsearch "pattern_replace", replacing whitespaces while analyzing

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

这是我的索引设置:

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

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

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

分析器通过首先对字符串进行标记化然后应用一系列标记过滤器来分析字符串。您已将分词器指定为标准意味着输入已经使用单独创建分词的 standard tokenizer 分词。然后将模式替换过滤器应用于标记。

使用 keyword tokenizer 而不是标准分词器。其余的映射很好。 您可以如下更改您的映射

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