# Contains query in elastic search

**URL:** <https://discuss.elastic.co/t/contains-query-in-elastic-search/351932>\
**Category:** Elasticsearch\
**Created:** [January 28, 2024, 8:09am UTC](https://discuss.elastic.co/t/contains-query-in-elastic-search/351932 "2024-01-28T08:09:38Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![post90](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/post90/32/125484_2.png) [@post90](https://discuss.elastic.co/u/post90)\
**Post date:** [January 28, 2024, 8:09am UTC](https://discuss.elastic.co/t/contains-query-in-elastic-search/351932/1 "2024-01-28T08:09:38Z")

</div>

How do we do a contains string search in elasticsearch in more than 1 field efficiently e.g text "denis tomas" should be searchable by query "tom". I stumbled upon [query\_string](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html) query but usage of wildcards make it inefficient. Also, **ngram** tokenizer doesn't lead to a true contains search unless using with multi-match with **and** operator which again increases the number of clauses. Is there any (optimizations over the above two)/other efficient way for contains search?

---

<div class="post-metadata">

**Author:** ![Christian\_Dahlqvist](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/christian_dahlqvist/32/4617_2.png) [@Christian\_Dahlqvist](https://discuss.elastic.co/u/Christian_Dahlqvist)\
**Post date:** [January 28, 2024, 8:31am UTC](https://discuss.elastic.co/t/contains-query-in-elastic-search/351932/2 "2024-01-28T08:31:13Z")

</div>

Have you looked at using a [wildcard field](https://www.elastic.co/guide/en/elasticsearch/reference/8.12/keyword.html#wildcard-field-type) together with a wildcard query?

---

<div class="post-metadata">

**Author:** ![post90](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/post90/32/125484_2.png) [@post90](https://discuss.elastic.co/u/post90)\
**Post date:** [January 28, 2024, 12:25pm UTC](https://discuss.elastic.co/t/contains-query-in-elastic-search/351932/3 "2024-01-28T12:25:29Z")

</div>

I was going through its documentation. However at the bottom it says the wildcard query is categorized as expensive? [Wildcard query | Elasticsearch Guide [8.12] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html#_allow_expensive_queries_7).

---

<div class="post-metadata">

**Author:** ![Christian\_Dahlqvist](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/christian_dahlqvist/32/4617_2.png) [@Christian\_Dahlqvist](https://discuss.elastic.co/u/Christian_Dahlqvist)\
**Post date:** [January 28, 2024, 12:28pm UTC](https://discuss.elastic.co/t/contains-query-in-elastic-search/351932/4 "2024-01-28T12:28:43Z")

</div>

It is if you run it against a field that is not mapped as wildcard. I can not think of any other way to do what you want in an efficient way.

---

<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:** [February 25, 2024, 12:29pm UTC](https://discuss.elastic.co/t/contains-query-in-elastic-search/351932/5 "2024-02-25T12:29:02Z")

</div>

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