Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Regex query not works in EleasticSearch but works in java

The Regex works in java but is not woked in ElasticSearch.

Java:


Pattern pattern = Pattern.compile("(\\d{8}-[01],)*(((202210((2[89])|(3[01])))|(2022((1[12]))\\d{2})|(20((2[3-9])|([3-9][0-9]))\\d{4}))-[01])*([,]\\d{8}-[01])*");
Matcher matcher = pattern.matcher("20221027-0,20221028-1");
System.out.println(matcher.matches());

It prints true

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

But when I using EleasticSearch, it was not woked.

The folloing json is the document what I want to query in EleasticSearch.


{
    "_index": "eagle_clue_v1",
    "_type": "_doc",
    "_id": "51740",
    "_score": 0.0,
    "_source": {
        "id": 51740,
        "next_follow_time": "20221027-0,20221028-1"
    }
}

The following query was not worked

POST /eagle_clue_v1/_search
{
    "from": 0,
    "size": 10,
    "query": {
        "bool": {
            "must": [
                {
                    "bool": {
                        "filter": [
                            {
                                "terms": {
                                    "id": [
                                        "51740"
                                    ]
                                }
                            },
                            {
                                "regexp": {
                                    "next_follow_time.keyword": {
                                        "value": "(\\d{8}-[01],)*(((202210((2[89])|(3[01])))|(2022((1[12]))\\d{2})|(20((2[3-9])|([3-9][0-9]))\\d{4}))-[01])([,]\\d{8}-[01])*"
                                    }
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

>Solution :

Check this page for regular expression syntax.

  1. use [0-9] instead of \d.
{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "filter": [
              {
                "regexp": {
                  "next_follow_time.keyword": {
                     "value": """([0-9]{8}-[01],)*(((202210((2[89])|(3[01])))|(2022((1[12]))[0-9]{2})|(20((2[3-9])|([3-9][0-9]))[0-9]]{4}))-[01])([,][0-9]{8}-[01])*"""
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading