在elasticsearch术语查询中使用正则表达式

时间:2016-03-16 04:36:40

标签: regex elasticsearch

我希望找到按ID过滤的所有项目都匹配一些正则表达式,如

*TEST123*   //pattern for regexp

所以预期的结果是项目

ATEST123001

ATEST123002

ATEST123003

TTTTEST123001

...

我可以创建一些扫描完整存储空间并在日志文件中保存ID的脚本,以后可以查看。但我想找到一些更好的解决方案

更新 我试过了

"query" : { "match_all" : { }, "filtered" : { "filter" : { "regexp": { "id":".test123." } } } }, }

我收到了

//嵌套:ElasticsearchParseException [预期的字段名称但得到了START_OBJECT \"过滤了\"]

当我尝试

{
  "regexp": {
    "id": "test123"
  }

}

//解析失败[没有解析元素[regexp]]]

ES 1.7.4和Lucene 4.10.4

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式查询。 regexp查询允许您使用正则表达式术语查询。

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

示例正则表达式查询:

{
    "regexp":{
        "id": "*test123*"
    }
}

更新: 在2.0中,regexp过滤器已被regexp查询取代。

   {
      "query": {
        "filtered": {
          "filter": {
            "regexp":{
              "id":".*TEST123.*"
            }
          }
        }
      }
    }

答案 1 :(得分:0)

您可以尝试Query String

{
"query": {
 "query_string": {
    "default_field": "if",
    "query": "*test123*"
   }
  }
}