# Query to be used to find substring in a column

**URL:** <https://discuss.elastic.co/t/query-to-be-used-to-find-substring-in-a-column/45507>\
**Category:** Elasticsearch\
**Created:** [March 26, 2016, 9:42am UTC](https://discuss.elastic.co/t/query-to-be-used-to-find-substring-in-a-column/45507 "2016-03-26T09:42:09Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![nitin](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nitin/32/20151_2.png) [@nitin](https://discuss.elastic.co/u/nitin)\
**Post date:** [March 26, 2016, 9:42am UTC](https://discuss.elastic.co/t/query-to-be-used-to-find-substring-in-a-column/45507/1 "2016-03-26T09:42:09Z")

</div>

Hi,

I have a field as TAGS which contains various tags for an indexed document.  
I have to search over these tags and if the entered string matches partially or fully to any of these tags then search result should display the document details.  
Example- My TAGS field for a document contains: "chocolate sweet maxys birthday default"  
Then all these terms in search should result in this document. choc or sweet or d or def.  
Just like we get in head plugin's browser tab.

Any help for Java QueryBuilder would be helpful.

Regards

---

<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:** [March 26, 2016, 10:30am UTC](https://discuss.elastic.co/t/query-to-be-used-to-find-substring-in-a-column/45507/2 "2016-03-26T10:30:05Z")

</div>

I would use a ngram based analyzer.

---

<div class="post-metadata">

**Author:** ![nitin](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nitin/32/20151_2.png) [@nitin](https://discuss.elastic.co/u/nitin)\
**Post date:** [March 27, 2016, 10:51am UTC](https://discuss.elastic.co/t/query-to-be-used-to-find-substring-in-a-column/45507/3 "2016-03-27T10:51:42Z")

</div>

I am using QueryBuilders.wildcardQuery  
works well for me.

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:** [March 27, 2016, 11:04am UTC](https://discuss.elastic.co/t/query-to-be-used-to-find-substring-in-a-column/45507/4 "2016-03-27T11:04:23Z")

</div>

Well. Super inefficient. If you don't have too many terms, that might work but really it's better to use ngrams.

---

<div class="post-metadata">

**Author:** ![nitin](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nitin/32/20151_2.png) [@nitin](https://discuss.elastic.co/u/nitin)\
**Post date:** [March 27, 2016, 2:24pm UTC](https://discuss.elastic.co/t/query-to-be-used-to-find-substring-in-a-column/45507/5 "2016-03-27T14:24:29Z")

</div>

how about matchPhrasePrefixQuery ? Is it also bad?

---

<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 5, 2017, 11:04pm UTC](https://discuss.elastic.co/t/query-to-be-used-to-find-substring-in-a-column/45507/6 "2017-07-05T23:04:52Z")

</div>


