

# Key differences
<a name="query-differences"></a>

The following table lists the key differences between Solr and OpenSearch search features.


| Feature | Solr | OpenSearch | 
| --- | --- | --- | 
| Full-text search | Query parsers: Standard, DisMax, Extended DisMax (eDisMax), Simple | Match, multi-match, query string, match phrase, and so on | 
| Faceting | `facet`, `facet.pivot`, `json.facet` parameters | Metric, bucket, and pipeline aggregations | 
| Filtering | Filter query (`fq`) parameter | Filter context | 
| Boosting | DisMax, eDisMax query | Boosting, disjunction, function score | 
| Highlighting | `unified`, `original`, `fastVector` parameters | `unified`, `fvh`, `plain`, `semantic` highlighters | 
| Suggestions | Suggester component | Autocomplete | 
| Geospatial | Spatial search | Geographic and XY queries | 

The following table lists frequently used query types in Solr and how to rewrite them in OpenSearch.


| Query type | Solr | OpenSearch | 
| --- | --- | --- | 
| Basic Boolean query | **Solr:**<pre># Simple field query<br />q=title:java<br /><br /># Multiple field queries<br />q=title:java AND author:smith<br />q=title:java OR author:python</pre>  | <pre> // Simple field query<br />{<br />  "query": {<br />    "term": {<br />      "title": "java"<br />    }<br />  }<br />}<br /><br />// Multiple field queries - AND<br />{<br />  "query": {<br />    "bool": {<br />      "must": [<br />        {"term": {"title": "java"}},<br />        {"term": {"author": "smith"}}<br />      ]<br />    }<br />  }<br />}<br /><br />// Multiple field queries - OR<br />{<br />  "query": {<br />    "bool": {<br />      "should": [<br />        {"term": {"title": "java"}},<br />        {"term": {"author": "python"}}<br />      ]<br />    }<br />  }<br />}</pre> | 
| Full-text search queries with boost  | <pre># Solr DisMax<br />q=java programming&defType=dismax&qf=title^2 content author<br /><br /># Solr eDisMax with phrase boost<br />q=java programming&defType=edismax&qf=title^3 content^1&pf=title^10&mm=75%</pre> | <pre>// Basic multi-match<br />{<br />  "query": {<br />    "multi_match": {<br />      "query": "java programming",<br />      "fields": ["title^2", "content", "author"]<br />    }<br />  }<br />}<br /><br />// Advanced multi-match with phrase boost<br />{<br />  "query": {<br />    "bool": {<br />      "must": [<br />        {<br />          "multi_match": {<br />            "query": "java programming",<br />            "fields": ["title^3", "content"],<br />            "minimum_should_match": "75%"<br />          }<br />        }<br />      ],<br />      "should": [<br />        {<br />          "match_phrase": {<br />            "title": {<br />              "query": "java programming",<br />              "boost": 10<br />            }<br />          }<br />        }<br />      ]<br />    }<br />  }<br />}</pre> | 
| Range queries  | <pre># Numeric range<br />q=price:[10 TO 50]<br /><br /># Date range<br />q=publishDate:[2020-01-01T00:00:00Z TO 2023-12-31T23:59:59Z]<br /><br /># Open-ended range<br />q=price:[10 TO *]<br />q=price:[* TO 50]</pre> | <pre>// Numeric range<br />{<br />  "query": {<br />    "range": {<br />      "price": {<br />        "gte": 10,<br />        "lte": 50<br />      }<br />    }<br />  }<br />}<br /><br />// Date range<br />{<br />  "query": {<br />    "range": {<br />      "publishDate": {<br />        "gte": "2020-01-01T00:00:00Z",<br />        "lte": "2023-12-31T23:59:59Z"<br />      }<br />    }<br />  }<br />}<br /><br />// Open-ended range<br />{<br />  "query": {<br />    "range": {<br />      "price": {<br />        "gte": 10<br />      }<br />    }<br />  }<br />}</pre> | 
| Wildcard and fuzzy queries  | <pre># Wildcard queries<br />q=title:jav*<br />q=title:*ava<br />q=title:j?va<br /><br /># Fuzzy queries<br />q=title:java~2<br />q=title:"java programming"~3</pre> | <pre>// Wildcard queries<br />{<br />  "query": {<br />    "wildcard": {<br />      "title": "jav*"<br />    }<br />  }<br />}<br /><br />{<br />  "query": {<br />    "wildcard": {<br />      "title": "*ava"<br />    }<br />  }<br />}<br /><br />// Fuzzy queries<br />{<br />  "query": {<br />    "fuzzy": {<br />      "title": {<br />        "value": "java",<br />        "fuzziness": 2<br />      }<br />    }<br />  }<br />}<br /><br />// Fuzzy phrase query<br />{<br />  "query": {<br />    "match_phrase": {<br />      "title": {<br />        "query": "java programming",<br />        "slop": 3<br />      }<br />    }<br />  }<br />}</pre> | 
| Filter queries  | <pre># Filter queries<br />q=java&fq=category:programming&fq=inStock:true&fq=price:[10 TO 50]</pre> | <pre>{<br />  "query": {<br />    "bool": {<br />      "must": [<br />        {"match": {"_all": "java"}}<br />      ],<br />      "filter": [<br />        {"term": {"category": "programming"}},<br />        {"term": {"inStock": true}},<br />        {"range": {"price": {"gte": 10, "lte": 50}}}<br />      ]<br />    }<br />  }<br />}</pre> | 
| Phrase and proximity queries  | <pre># Exact phrase<br />q="java programming"<br /><br /># Proximity search<br />q="java programming"~5<br /><br /># Phrase with field<br />q=title:"machine learning"~2</pre> | <pre>// Exact phrase<br />{<br />  "query": {<br />    "match_phrase": {<br />      "_all": "java programming"<br />    }<br />  }<br />}<br /><br />// Proximity search<br />{<br />  "query": {<br />    "match_phrase": {<br />      "_all": {<br />        "query": "java programming",<br />        "slop": 5<br />      }<br />    }<br />  }<br />}<br /><br /><br />// Phrase with specific field<br />{<br />  "query": {<br />    "match_phrase": {<br />      "title": {<br />        "query": "machine learning",<br />        "slop": 2<br />      }<br />    }<br />  }<br />}</pre>You can also use span and interval queries for proximity search. | 
| Aggregation | <pre># Basic faceting<br />q=*:*&facet=true&facet.field=category&facet.field=author</pre> | <pre>// Basic aggregations<br />{<br />  "query": {"match_all": {}},<br />  "aggs": {<br />    "categories": {<br />      "terms": {<br />        "field": "category"<br />      }<br />    },<br />    "authors": {<br />      "terms": {<br />        "field": "author"<br />      }<br />    }<br />  }<br />}</pre> | 
| Nested faceting or aggregation | <pre># nested faceting <br />{<br />  "query": "*:*",<br />  "facet": {<br />    "categories": {<br />      "type": "terms",<br />      "field": "category",<br />      "limit": 10,<br />      "facet": {<br />        "brands": {<br />          "type": "terms",<br />          "field": "brand",<br />          "limit": 5,<br />          "facet": {<br />            "avg_price": {<br />              "type": "avg",<br />              "field": "price"<br />            },<br />            "max_price": {<br />              "type": "max",<br />              "field": "price"<br />            }<br />          }<br />        }<br />      }<br />    }<br />  }<br />}</pre> | <pre># OpenSearch nested aggregation<br /><br />{<br />  "query": {<br />    "match_all": {}<br />  },<br />  "size": 0,<br />  "aggs": {<br />    "categories": {<br />      "terms": {<br />        "field": "category",<br />        "size": 10<br />      },<br />      "aggs": {<br />        "brands": {<br />          "terms": {<br />            "field": "brand",<br />            "size": 5<br />          },<br />          "aggs": {<br />            "avg_price": {<br />              "avg": {<br />                "field": "price"<br />              }<br />            },<br />            "max_price": {<br />              "max": {<br />                "field": "price"<br />              }<br />            }<br />          }<br />        }<br />      }<br />    }<br />  }<br />}</pre> | 
| Geospatial queries  | <pre># Geo distance<br />q={!geofilt pt=37.7752,-122.4232 sfield=location d=10}</pre> | <pre>// Geo distance<br />{<br />  "query": {<br />    "geo_distance": {<br />      "distance": "10km",<br />      "location": {<br />        "lat": 37.7752,<br />        "lon": -122.4232<br />      }<br />    }<br />  }<br />}</pre> | 

The following sections discuss some of the Solr search features and their equivalents in OpenSearch in more detail. After migration to OpenSearch, make sure to test all your queries in OpenSearch and compare the results with your Solr-based system. For your search applications, OpenSearch provides both high-level and low-level clients for multiple languages. For more information, see [OpenSearch language clients](https://docs.opensearch.org/latest/clients/) in the OpenSearch documentation.