# ElasticSearch 5.3 filterer char\_filter. pattern\_replace not working

**URL:** <https://discuss.elastic.co/t/elasticsearch-5-3-filterer-char-filter-pattern-replace-not-working/95265>\
**Category:** Elasticsearch\
**Created:** [August 1, 2017, 2:24am UTC](https://discuss.elastic.co/t/elasticsearch-5-3-filterer-char-filter-pattern-replace-not-working/95265 "2017-08-01T02:24:54Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Galim\_Kaudinov](https://avatars.discourse-cdn.com/v4/letter/g/e5b9ba/32.png) [@Galim\_Kaudinov](https://discuss.elastic.co/u/Galim_Kaudinov)\
**Post date:** [August 1, 2017, 2:24am UTC](https://discuss.elastic.co/t/elasticsearch-5-3-filterer-char-filter-pattern-replace-not-working/95265/1 "2017-08-01T02:24:54Z")

</div>

favorite  
I have a requirement where I need to query docs by phone number. Users can enter characters such as parenthesis and dashes in the search query string and they should be [ignored.So](http://ignored.So), I have created a custom analyzer that uses a char\_filter which in its turn uses pattern\_replace token filter to remove everything but digits with a regex. But It does not seem like elastic search is filtering out non-digits. Here is a sample of what I am trying to do:

**Index Creation**

```
put my_test_index 
{
     "settings" : {
         "index": {
            "analysis": {
               "char_filter": {
                  "non_digit": {
                     "pattern": "\\D",
                     "type": "pattern_replace",
                     "replacement": ""
                  }
               },
               "analyzer": {
                  "no_digits_analyzer": {
                     "type": "custom",
                     "cahr_filter": [
                        "non_digit"
                     ],
                     "tokenizer": "keyword"
                  }
            }
        }
     }
   },
   "mappings" : {
       "doc_with_phone_prop" : {
           "properties": {
               "phone": {
                   "type": "text",
                   "analyzer": "no_digits_analyzer",
                   "search_analyzer": "no_digits_analyzer"
               }
           }
       }
   }
}

```

**Inserting one doc**

```
put my_test_index/doc_with_phone_prop/1
{
    "phone": "3035555555"
}

```

**Querying without any parenthesis or dashes in the phone**

```
post my_test_index/doc_with_phone_prop/_search
{
    "query": {
        "bool": {
            "must": [
            {
                "query_string": {
                    "query": "3035555555",
                    "fields": ["phone"]
                }
            }]
        }
    }
}

```

**This returns one document correctly:**

```
{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 0.2876821,
      "hits": [
         {
            "_index": "my_test_index",
            "_type": "doc_with_phone_prop",
            "_id": "1",
            "_score": 0.2876821,
            "_source": {
               "phone": "3035555555"
            }
         }
      ]
   }
}

```

**Querying with parenthesis does not return anything, But I was under the assumption that my no\_digits\_analyzer will remove from the search terms everything but digits.**

```
post my_test_index/doc_with_phone_prop/_search
{
    "query": {
        "bool": {
            "must": [
            {
                "query_string": {
                    "query": "\\(303\\)5555555",
                    "fields": ["phone"]
                }
            }]
        }
    }
}

```

What am I doing wrong here?

I am using ElasticSearch 5.3.

Thanks.

---

<div class="post-metadata">

**Author:** ![medcl.net](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/medcl.net/32/4414_2.png) [@medcl.net](https://discuss.elastic.co/u/medcl.net)\
**Post date:** [August 1, 2017, 2:55am UTC](https://discuss.elastic.co/t/elasticsearch-5-3-filterer-char-filter-pattern-replace-not-working/95265/2 "2017-08-01T02:55:17Z")

</div>

> [@Galim\_Kaudinov](#):
>
> cahr\_filter

Hey， there is a small typo： `cahr_filter`，should fixed with： `char_filter`

---

<div class="post-metadata">

**Author:** ![Galim\_Kaudinov](https://avatars.discourse-cdn.com/v4/letter/g/e5b9ba/32.png) [@Galim\_Kaudinov](https://discuss.elastic.co/u/Galim_Kaudinov)\
**Post date:** [August 1, 2017, 3:05am UTC](https://discuss.elastic.co/t/elasticsearch-5-3-filterer-char-filter-pattern-replace-not-working/95265/3 "2017-08-01T03:05:35Z")

</div>

Yep! fixed it. Thanks, this was pretty stupid.

But now for whatever reason when I query \(303\)5555555 returns a correct row and 3035555555, but If I put dash inside it does not return results, like this \(303\)555-5555. Regex seems to be correct.

---

<div class="post-metadata">

**Author:** ![medcl.net](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/medcl.net/32/4414_2.png) [@medcl.net](https://discuss.elastic.co/u/medcl.net)\
**Post date:** [August 1, 2017, 6:05am UTC](https://discuss.elastic.co/t/elasticsearch-5-3-filterer-char-filter-pattern-replace-not-working/95265/4 "2017-08-01T06:05:11Z")

</div>

if you already filtered the char during analysis chain, you can easily use the field directly, regex is not needed, just use simple query string query.

---

<div class="post-metadata">

**Author:** ![Galim\_Kaudinov](https://avatars.discourse-cdn.com/v4/letter/g/e5b9ba/32.png) [@Galim\_Kaudinov](https://discuss.elastic.co/u/Galim_Kaudinov)\
**Post date:** [August 1, 2017, 4:32pm UTC](https://discuss.elastic.co/t/elasticsearch-5-3-filterer-char-filter-pattern-replace-not-working/95265/5 "2017-08-01T16:32:57Z")

</div>

I was using query\_string in the **must** and that was **incorrect** , because it does not escape special characters.

I needed to use multi\_match

[https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html)

```
post my_test_index/doc_with_phone_prop/_search
{
    "query": {
		"bool": {
			"must": [
			{
				"multi_match": {
					"query": "(303) 555- 5555",
					"fields": ["phone"]
				}
			}]
		}
	}
}
```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [August 29, 2017, 4:33pm UTC](https://discuss.elastic.co/t/elasticsearch-5-3-filterer-char-filter-pattern-replace-not-working/95265/6 "2017-08-29T16:33:35Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
