Elasticsearch模式正则表达式以

时间:2016-08-18 15:30:24

标签: regex elasticsearch

我想问一下是否存在一些描述如何使用 Elasticseach模式正则表达式的文档。

我需要编写模式捕获令牌过滤器,它只过滤以特定字开头。例如,输入令牌流应该是(" abcefgh"," abc123"," aabbcc"," abc",&# 34; abdef" )我的标记器只返回 abcefgh abc123 abc ,因为这些标记以&开头#34;的 ABC "

有人可以帮助我如何实现这个用例吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我建议这样的事情:

"analysis": {
  "analyzer": {
    "my_trim_keyword_analyzer": {
      "type": "custom",
      "tokenizer": "keyword",
      "filter": [
        "lowercase",
        "trim",
        "generate_tokens",
        "eliminate_tokens",
        "remove_empty"
      ]
    }
  },
  "filter": {
    "eliminate_tokens": {
      "pattern": "^(?!abc)\\w+$",
      "type": "pattern_replace",
      "replacement": ""
    },
    "generate_tokens": {
      "type": "pattern_capture",
      "preserve_original": 1,
      "patterns": [
        "(([a-z]+)(\\d*))"
      ]
    },
    "remove_empty": {
      "type": "stop",
      "stopwords": [""]
    }
  }
}

如果您的令牌是pattern_capture过滤器的结果,则您需要在此过滤器后添加我的示例中名为eliminate_tokens的过滤器,它基本上与不匹配的令牌相匹配从abc开始。那些不匹配的用空字符串("replacement": "")替换。

在此之后,为了删除空标记,我添加了remove_empty过滤器,该过滤器基本上是stop过滤器,其中停用词为""(空字符串)。