如何搜索" \ .... \"在elasticsearch中使用regexp

时间:2016-08-02 15:00:24

标签: regex elasticsearch

在我的索引数据中,我有一些文件具有这样的值 -

"排除y:\ dkj .... \ sdfisd \ sdfsdf \ asdfai"

我的要求是根据" \ .... \"搜索所有具有此类条目的文件。因此,我正在使用" regexp"。 目前我已使用下面的正则表达式,但它并没有为我做好准备 -

  1. " *。\\(。\ \ \ \)\\ *"
  2. " * [\。] {4} *"?
  3. " *。\\ [\] {4} \\ *"
  4. 以下是我向弹性搜索发出的查询部分。

            "bool" : {
              "must" : [ {
                "query_string" : {
                  "query" : "\"DC2\"",
                  "default_field" : "COLLECTOR_NAME"
                }
              }, {
                "regexp" : {
                  "RAW_EVENT_DATA" : {
                    "value" : ".*?[\\.]{4}.*", 
                    "flags_value" : 0
                  }
                }
              } ]
            }
    

    请提供一些建议。

1 个答案:

答案 0 :(得分:0)

通常它与分析仪有关 让我们创建具有以下映射的类型

{
  "my_index": {
    "mappings": {
      "test": {
        "properties": {
          "title": {
            "type": "string"
          },
          "title_raw": {
            "type": "string",
            "index": "not_analyzed"
          }
       }
      }
    }
  }
}

添加新文件

POST my_index/test/1
{
  "title":"exclude y:\\dkj....\\sdfisd\\sdfsdf\\asdfai",
  "title_raw":"exclude y:\\dkj....\\sdfisd\\sdfsdf\\asdfai"
}

现在搜索

POST my_index/test/_search
{
  "query": {
    "regexp" : {
              "title" : {
                "value" : ".*?[\\.]{4}.*", 
                "flags_value" : 0
              }
  }
}

返回空结果

但未分析的字段与regexp完美配合

POST my_index/test/_search
{
  "query": {
    "regexp" : {
              "title_raw" : {
                "value" : ".*?[\\.]{4}.*", 
                "flags_value" : 0
              }
  }
}

您可以查看documentation以了解其原因。因为您使用的是标准分析器,所以信息的一部分在索引阶段丢失,在搜索过程中不可用。