ElasticSearch Regexp在数组中

时间:2017-03-06 10:41:30

标签: regex elasticsearch

在ElasticSearch存储的文档中,字段“kitten”存储了2种类型的值:带有数字和仅有数字的单词。 例如:

cat8389
fox973
947384

我想获取所有文档,在这个数组中最少只存储一个数字值,并且无法为其编写正确的查询:(

我试试这个,但这是不正确的:

{
  "query": {
    "bool": {
      "must": [
        {
          "regexp": {
            "kitten": "[0-9 ]+$"
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 10,
  "sort": [],
  "aggs": {}
}

请帮帮我......

1 个答案:

答案 0 :(得分:2)

ElasticSearch patterns默认为固定,您无法使用字符串$锚点的结尾(与字符串^的开头相同)。这也意味着模式必须匹配整个输入。

  

大多数正则表达式引擎允许您匹配字符串的任何部分。如果您希望正则表达式模式从字符串的开头开始或在字符串的结尾处完成,那么您必须使用^指示开头或$来指示端。

     

Lucene的模式总是固定不变的。提供的模式必须与整个字符串匹配。

因此,要匹配仅数字输入,请使用仅仅"[0-9]+"模式。