如何编写正则表达式以从Elastic Search中开始检查

时间:2018-09-27 07:01:03

标签: elasticsearch

我通过使用以下映射创建了索引:

PUT test9
{
    "mappings" : {
        "type1" : {
            "properties" : {
                "name" : { "type" : "text"}
            }
        }
    }
}

之后,我在其中添加了以下文档:

PUT test9/type1/1/_create
{
  "name":"suraj"
}

PUT test9/type1/2/_create
{
  "name":"nitesh"
}

PUT test9/type1/3/_create
{
  "name":"suresh"
}

现在,我想使用正则表达式检查名称以“ sur ”开头的文档。因此,我使用了以下查询:

GET test9/type1/_search
{
  "query": {
    "regexp":{
      "name":"^sur"
    }
  }
}

以上查询未给出任何结果。请让我知道这里出什么问题了吗?如何在弹性搜索中编写正则表达式? 我们可以直接在弹性搜索中使用mongo正则表达式吗?

1 个答案:

答案 0 :(得分:1)

在Elasticsearch中实现此目标的3种方法:

GET test9/type1/_search
{
  "query": {
    "prefix": {
      "name": "sur"
    }
  }
}


GET test9/type1/_search
{
  "query": {
    "wildcard":{
      "name":"sur*"
    }
  }
}

GET test9/type1/_search
{
  "query": {
    "regexp":{
      "name":"sur.*"
    }
  }
}

注意:

前缀,正则表达式和通配符仅在字段的未经分析的部分上起作用。因此,不允许使用标准正则表达式的运算符^。查看允许的正则表达式字符的链接。

资源: https://www.elastic.co/guide/en/elasticsearch/guide/current/_wildcard_and_regexp_queries.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html