# Boolean Search with Synonym Filter

**URL:** <https://discuss.elastic.co/t/boolean-search-with-synonym-filter/171711>\
**Category:** Elasticsearch\
**Created:** [March 11, 2019, 9:27am UTC](https://discuss.elastic.co/t/boolean-search-with-synonym-filter/171711 "2019-03-11T09:27:11Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ronyarmon](https://avatars.discourse-cdn.com/v4/letter/r/b782af/32.png) [@ronyarmon](https://discuss.elastic.co/u/ronyarmon)\
**Post date:** [March 11, 2019, 9:27am UTC](https://discuss.elastic.co/t/boolean-search-with-synonym-filter/171711/1 "2019-03-11T09:27:12Z")

</div>

I'm trying to combine Boolean search using the "must" statement that takes into account the synonyms, currently set up in a synonyms text file during indexing as follows-  
Indexing:  
data='{"settings": {"index":{"analysis":{"analyzer":{"synonym":{"tokenizer":"whitespace","filter":["synonym"]}},"filter":{"synonym":{"type":"synonym","synonyms\_path":"analysis/med\_syn.txt"}}}}}}'`  
response = requests.put('[http://localhost:9200/all\_articles\_synonyms](http://localhost:9200/all_articles_synonyms)', headers=headers, data=data)

Search: The following statements work well  
Synonym search:  
`data="{'query': {'match': {'article': {'query': 'search_term1', 'analyzer': 'synonym'}}}}"`  
Boolean search-individual terms:  
`data_now={'query': {'bool': {'must': [{'term': {'article': 'search_term1'}}, {'term': {'article': 'search_term2'}}]}}}`  
Boolean search as list:  
`data='{"query": {"bool": {"must": [{"terms": {"article":["search_term2", "search_term1"]}}]}}}'`

What I'm trying to achieve is a combination of both as in:  
`data='{"query": {"bool": {"must": [{"terms": {"article":["search_term1","search_term2"], "analyzer": "synonym"}}]}}}'`  
But this statement gets: \>

> '{"error":{"root\_cause":[{"type":"parsing\_exception","reason":"[terms] query does not support [analyzer]","line":1,"col":107}],"type":"parsing\_exception","reason":"[terms] query does not support [analyzer]","line":1,"col":107},"status":400}'

Can I rewrite this statement to get the Boolean search results with the synonyms filter? Is there another way I should follow?

---

<div class="post-metadata">

**Author:** ![cbuescher](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/cbuescher/32/60402_2.png) [@cbuescher](https://discuss.elastic.co/u/cbuescher)\
**Post date:** [March 12, 2019, 9:39am UTC](https://discuss.elastic.co/t/boolean-search-with-synonym-filter/171711/2 "2019-03-12T09:39:02Z")

</div>

Both [term](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html) and [terms](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html) query are supposed to be used for exact matching, not analyzed text search. Your example uses a synonym analyzer, this will not be used in those queries. Use a `match` query like in the working example instead. It also works in bool clauses.

---

<div class="post-metadata">

**Author:** ![ronyarmon](https://avatars.discourse-cdn.com/v4/letter/r/b782af/32.png) [@ronyarmon](https://discuss.elastic.co/u/ronyarmon)\
**Post date:** [March 12, 2019, 11:47am UTC](https://discuss.elastic.co/t/boolean-search-with-synonym-filter/171711/3 "2019-03-12T11:47:59Z")

</div>

Thanks Christoph, problem solved with yours and [this](https://stackoverflow.com/questions/35583781/must-match-multiple-values) answer. The format I'm using is:  
{  
"query": {  
"bool":{  
"must":[  
{  
"match": {  
"article": {  
"query": "search\_term1",  
"analyzer": "synonym"  
}  
}  
},  
{  
"match":{  
"article": {  
"query": "search\_term2",  
"analyzer": "synonym"  
}  
}  
}  
]  
}  
}  
}

---

<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:** [April 9, 2019, 11:48am UTC](https://discuss.elastic.co/t/boolean-search-with-synonym-filter/171711/4 "2019-04-09T11:48:00Z")

</div>

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