# Escaping field names in queries

**URL:** <https://discuss.elastic.co/t/escaping-field-names-in-queries/279861>\
**Category:** Elasticsearch\
**Created:** [July 28, 2021, 1:14pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861 "2021-07-28T13:14:30Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![stexxen](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stexxen/32/68327_2.png) [@stexxen](https://discuss.elastic.co/u/stexxen)\
**Post date:** [July 28, 2021, 1:14pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861/1 "2021-07-28T13:14:30Z")

</div>

We have discovered that some documents in our index contain a source that resembles the following

```auto
{
  "a": {
    "b" : ["test1"]
  },
  "a.b" : ["test2"]
}

```

I'm aware of how to perform queries with "exists", but how do I specify the field `'a.b'` and not the field `'a'.'b'`

---

<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 28, 2021, 1:42pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861/2 "2021-07-28T13:42:50Z")

</div>

What is the mapping?

---

<div class="post-metadata">

**Author:** ![stexxen](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stexxen/32/68327_2.png) [@stexxen](https://discuss.elastic.co/u/stexxen)\
**Post date:** [July 28, 2021, 2:11pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861/3 "2021-07-28T14:11:55Z")

</div>

Thanks for responding.

For this

```auto
{
  "a": {
    "b" : ["test1"]
  }
}

```

a is mapped as an object (not nested) with b as keyword

the mistake `"a.b" : ["test2"]` exists in the source but is not mapped.

---

<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 28, 2021, 4:27pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861/4 "2021-07-28T16:27:52Z")

</div>

It's actually mapped the same way. So you can't make the difference I'm afraid.

---

<div class="post-metadata">

**Author:** ![stexxen](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stexxen/32/68327_2.png) [@stexxen](https://discuss.elastic.co/u/stexxen)\
**Post date:** [July 28, 2021, 4:30pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861/5 "2021-07-28T16:30:12Z")

</div>

So I can't detect records where this has happened at all?

---

<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 28, 2021, 9:48pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861/6 "2021-07-28T21:48:08Z")

</div>

May be with a [script query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-query.html)? But unsure.

---

<div class="post-metadata">

**Author:** ![stexxen](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/stexxen/32/68327_2.png) [@stexxen](https://discuss.elastic.co/u/stexxen)\
**Post date:** [July 29, 2021, 12:26pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861/7 "2021-07-29T12:26:15Z")

</div>

surely thats the same problem though?

How do I tell elastic to treat

`doc['a.b']` returning what `b` contains within the object `a`

and

`doc['a.b']` return what `a.b` contains

differently?

I assumed there was some way to escape the field name so Elastic didn't treat the '`.`' as a field break, (hence the title) but you seem to be saying that is not possible.

---

<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 29, 2021, 1:29pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861/8 "2021-07-29T13:29:11Z")

</div>

I believe that you can use the `_source` from a script to get the exact JSON document you actually sent. See [Accessing document fields and special variables | Elasticsearch Guide [7.13] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-fields.html#modules-scripting-source) for more details on that.

That way you could may be implement a script which reads `_source.a` and if it exists, do something with that...

HTH

---

<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 26, 2021, 1:29pm UTC](https://discuss.elastic.co/t/escaping-field-names-in-queries/279861/9 "2021-08-26T13:29:56Z")

</div>

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