一尘不染

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

elasticsearch

基本上,我想删除所有空格并将整个字符串标记为单个标记。(稍后我将在其上使用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”。


阅读 1008

收藏
2020-06-22

共1个答案

一尘不染

分析器首先对字符串进行标记处理,然后应用一系列标记过滤器来分析字符串。您已将tokenizer指定为标准,这意味着已使用标准的tokenizer对输入进行了令牌,后者分别创建了token。然后将模式替换过滤器应用于令牌。

使用关键字标记器代替标准标记器。其余的映射就可以了。您可以如下更改映射

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