# If field contains uppercase search

**URL:** <https://discuss.elastic.co/t/if-field-contains-uppercase-search/139638>\
**Category:** Elasticsearch\
**Created:** [July 11, 2018, 7:46pm UTC](https://discuss.elastic.co/t/if-field-contains-uppercase-search/139638 "2018-07-11T19:46:47Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jeff\_Bursik](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jeff_bursik/32/23626_2.png) [@Jeff\_Bursik](https://discuss.elastic.co/u/Jeff_Bursik)\
**Post date:** [July 11, 2018, 7:46pm UTC](https://discuss.elastic.co/t/if-field-contains-uppercase-search/139638/1 "2018-07-11T19:46:47Z")

</div>

Is there a way to determine if the field's value contains any upper case?

For example, I have 2 documents with field name. Doc1 = { name: jeff }. Doc2 = { name = Jeff}. I only want Doc2 returned since the "J" is capital.

thanks!

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [July 11, 2018, 9:38pm UTC](https://discuss.elastic.co/t/if-field-contains-uppercase-search/139638/2 "2018-07-11T21:38:48Z")

</div>

Change the default analyzer to a custom analyzer which does not apply a lowercase token filter. Or use a keyword data type.

---

<div class="post-metadata">

**Author:** ![Jeff\_Bursik](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jeff_bursik/32/23626_2.png) [@Jeff\_Bursik](https://discuss.elastic.co/u/Jeff_Bursik)\
**Post date:** [July 11, 2018, 11:36pm UTC](https://discuss.elastic.co/t/if-field-contains-uppercase-search/139638/3 "2018-07-11T23:36:07Z")

</div>

Maybe I didn't state my question correctly, or I'm just not sure how an analyzer would be used here but I'm looking for a query like:

GET \_search  
{  
"name.keyword": "contains caps"  
}

I'm not sure how an analyzer would help with that?

---

<div class="post-metadata">

**Author:** ![Jeff\_Bursik](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jeff_bursik/32/23626_2.png) [@Jeff\_Bursik](https://discuss.elastic.co/u/Jeff_Bursik)\
**Post date:** [July 11, 2018, 11:50pm UTC](https://discuss.elastic.co/t/if-field-contains-uppercase-search/139638/4 "2018-07-11T23:50:19Z")

</div>

After some more trial, found a regex query to do what I'm looking for:

```
      "regexp": {
        "name.keyword": "(.*[A-Z].*)"
      }
```

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [July 13, 2018, 8:43am UTC](https://discuss.elastic.co/t/if-field-contains-uppercase-search/139638/5 "2018-07-13T08:43:25Z")

</div>

I see. If this is a one shot only operation than your method is OK.  
If this is something you are going to run every time, I'd suggest that you compute something like a boolean `containsUpperCase` that you compute at index time and then just query it.

---

<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 10, 2018, 8:43am UTC](https://discuss.elastic.co/t/if-field-contains-uppercase-search/139638/6 "2018-08-10T08:43:31Z")

</div>

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