# Search for a numeric range inside string in elastic search

**URL:** <https://discuss.elastic.co/t/search-for-a-numeric-range-inside-string-in-elastic-search/1627>\
**Category:** Elasticsearch\
**Created:** [June 1, 2015, 9:14am UTC](https://discuss.elastic.co/t/search-for-a-numeric-range-inside-string-in-elastic-search/1627 "2015-06-01T09:14:02Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![pankajr141](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/pankajr141/32/455_2.png) [@pankajr141](https://discuss.elastic.co/u/pankajr141)\
**Post date:** [June 1, 2015, 9:14am UTC](https://discuss.elastic.co/t/search-for-a-numeric-range-inside-string-in-elastic-search/1627/1 "2015-06-01T09:14:03Z")

</div>

I am not sure it is a perfect platform to discuss a issue. If not then just please ignore this mail.  
I am trying to search a numeric expression inside a field indexed as string in elastic search.  
Example

```
indent code 4.8663 spaces
indent code 121.232 spaces
indent code 12.3232 spaces

```

Example query

```
get all string with "indent code between 1 and 100"

```

It should get 1st and 3rd but not 2nd.  
For this purpose I tried using span\_near query with range in span\_multi.

```
          {
                "span_near": {
                    "in_order": 1,
                    "clauses": [
                        {
                            "span_term": {
                                "request": "indent"
                            }
                        },
                        {
                            "span_term": {
                                "request": "code"
                            }
                        }
                        ,
                        {
                            "span_multi": {
                                    "match":{
                                        "range": {
                                            "request": {
                                                "to": 100,
                                                "from": 1
                                            }
                                        }
                                }
                            }
                        }
                    ],
                    "slop": 0,
                    "collect_payloads": 0
                }
            }

```

It is getting result but wrong result, as it is comparing using TermRangeQuery rather than NumericRangeQuery  
Any help would be appreciated. Also please let me know any other approach if possible.

---

<div class="post-metadata">

**Author:** ![Jason\_Wee](https://avatars.discourse-cdn.com/v4/letter/j/7ea924/32.png) [@Jason\_Wee](https://discuss.elastic.co/u/Jason_Wee)\
**Post date:** [June 2, 2015, 5:49pm UTC](https://discuss.elastic.co/t/search-for-a-numeric-range-inside-string-in-elastic-search/1627/2 "2015-06-02T17:49:56Z")

</div>

If you index that as string, I don't think range query will work as the range is lexicographically. maybe during index, you can add one more field with type float and query that field that contain numeric value only?

---

<div class="post-metadata">

**Author:** ![javadevmtl](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/javadevmtl/32/45613_2.png) [@javadevmtl](https://discuss.elastic.co/u/javadevmtl)\
**Post date:** [June 3, 2015, 5:17am UTC](https://discuss.elastic.co/t/search-for-a-numeric-range-inside-string-in-elastic-search/1627/3 "2015-06-03T05:17:21Z")

</div>

Maybe create a multifield with a custom analyzer that tokenizes "numbers" from a string. Probably to far fetched lol

I am no expert but yeah a you would need to write a custom tokenizer that would parse your field just for that value and then use multifield.

Or easier way maybe to just parse your string pre-indexing and set the number value in a separate field.

---

<div class="post-metadata">

**Author:** ![pankajr141](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/pankajr141/32/455_2.png) [@pankajr141](https://discuss.elastic.co/u/pankajr141)\
**Post date:** [June 3, 2015, 5:56am UTC](https://discuss.elastic.co/t/search-for-a-numeric-range-inside-string-in-elastic-search/1627/4 "2015-06-03T05:56:02Z")

</div>

Thanks, i figured that i got that answer coming 😄

The problem with saving integer as separate field is that, there could be many integer, float in the string may be hundreds and so i cannot store them all and if i do i have no way of knowing which one to match. The string that i have mentioned in question is just a sample one.

---

<div class="post-metadata">

**Author:** ![pankajr141](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/pankajr141/32/455_2.png) [@pankajr141](https://discuss.elastic.co/u/pankajr141)\
**Post date:** [June 10, 2015, 4:38pm UTC](https://discuss.elastic.co/t/search-for-a-numeric-range-inside-string-in-elastic-search/1627/5 "2015-06-10T16:38:32Z")

</div>

Hi did anyone find a solution yet

---

<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:** [July 6, 2017, 12:08am UTC](https://discuss.elastic.co/t/search-for-a-numeric-range-inside-string-in-elastic-search/1627/6 "2017-07-06T00:08:33Z")

</div>


