# Confused on how to do should and should not + boosting

**URL:** <https://discuss.elastic.co/t/confused-on-how-to-do-should-and-should-not-boosting/136220>\
**Category:** Elasticsearch\
**Created:** [June 17, 2018, 6:59pm UTC](https://discuss.elastic.co/t/confused-on-how-to-do-should-and-should-not-boosting/136220 "2018-06-17T18:59:02Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![ehorodyski](https://avatars.discourse-cdn.com/v4/letter/e/a698b9/32.png) [@ehorodyski](https://discuss.elastic.co/u/ehorodyski)\
**Post date:** [June 17, 2018, 6:59pm UTC](https://discuss.elastic.co/t/confused-on-how-to-do-should-and-should-not-boosting/136220/1 "2018-06-17T18:59:02Z")

</div>

I'm writing an API that utilizes facets to _suggest_ products to end users based on their settings. The data is multi-faceted in the sense that a user can combine filters from multiple categories. What's more, the returned result _should not_ be limited to exact results, but return a list of X items based on query score.

The data is proprietary, so I switched out the mapping to replace the real fields with Nintendo-based examples so we can all have a good time while I get some much needed Elasticsearch help.

**Example:** A user is looking for games where `Mario` and `Luigi` should be playable, but `Bowser` should not. The game should be for `SNES` and should not be for `NES`:

```
{
  "query": {
	"bool": {
	  "should": [
		{
			"nested": {
			"score_mode" : "sum",
			"path": "players",
			"query": { "bool": {"must": [
			  { "terms": { "players.name": ["Mario", "Luigi"] } }
			]}}
		  }
		},
		{
			"nested": {
			"score_mode" : "sum",
			"path": "console",
			"query": {"bool": {"must": [
			  { "terms": { "console.name": ["SNES"] } }
			]}}
		  }
		},
		{
		  "nested": {
			"score_mode" : "min",
			"path": "players",
			"query": {"bool": {"must_not": [
			  { "terms": { "players.name": ["Bowser"] } }
			]}}
		  }
		},
		{
		  "nested": {
			"score_mode" : "min",
			"path": "console",
			"query": {"bool": {"must_not": [
			  { "terms": { "console.name": ["NES"] } }
			]}}
		  }
		}
	  ]
	}
  }
}

```

**Results:**

```
"hits": [
	  {
		"_index": "games",
		"_type": "game",
		"_id": "4aee02d4-6b83-11e8-8938-294f2d4dc7ef",
		"_score": 5,
		"_source": {
		  "console": [
			{
			  "name": "SNES"
			}
		  ],
		  "players": [
			{
			  "name": "Luigi"
			},
			{
			  "name": "Mario"
			}
		  ]
		}
	  },
	  {
		"_index": "games",
		"_type": "game",
		"_id": "4795963e-6b88-11e8-a4cb-732f847dc805",
		"_score": 5,
		"_source": {
		  "console": [
			{
			  "name": "NES"
			},
			{
			  "name": "SNES"
			}
		  ],
		  "players": [
			{
			  "name": "Mario"
			},
			{
			  "name": "Luigi"
			},
			{
			  "name": "Peach"
			},
			{
			  "name": "Toad"
			}
		  ]
		}
	  },
	  {
		"_index": "games",
		"_type": "game",
		"_id": "800569c5-6b89-11e8-b27b-f7dae11d9bc9",
		"_score": 4,
		"_source": {
		  "console": [
			{
			  "name": "SNES"
			}
		  ],
		  "players": [
			{
			  "name": "Mario"
			}
			{
			  "name": "Bowser"
			}
		  ]
		}
	  },
	  {
		"_index": "games",
		"_type": "game",
		"_id": "13325f86-6b89-11e8-bfea-1fe5e2b5a461",
		"_score": 4,
		"_source": {
		  "console": [
			{
			  "name": "SNES"
			},
			{
			  "name": "NES"
			}
		  ],
		  "players": [
			{
			  "name": "Mario"
			},
			{
			  "name": "Bowser"
			}
		  ]
		}
	  },
	  {
		"_index": "games",
		"_type": "game",
		"_id": "256d4dcb-6b86-11e8-b4e0-3fece057ccb0",
		"_score": 3,
		"_source": {
		  "console": [
			{
			  "name": "SNES"
			}
		  ],
		  "players": [
			{
			  "name": "Mega Man"
			}
		  ]
		}
	  },
	  {
		"_index": "games",
		"_type": "game",
		"_id": "5bcda1fa-6b87-11e8-a411-e7f5fa3abcdd",
		"_score": 3,
		"_source": {
		  "console": [
			{
			  "name": "SNES"
			},
			{
			  "name": "NES"
			}
		  ],
		  "players": [
			{
			  "name": "Fox McCloud"
			}
		  ]
		}
	  },
	  {
		"_index": "games",
		"_type": "game",
		"_id": "e3020f5c-6b87-11e8-8cc6-87fc791a9c1a",
		"_score": 2,
		"_source": {
		  "console": [
			{
			  "name": "NES"
			}
		  ],
		  "players": [
			{
			  "name": "Kid Icarus"
			}
		  ]
		}
	  },
	  {
		"_index": "games",
		"_type": "game",
		"_id": "48291645-6b83-11e8-a4cb-732f847dc805",
		"_score": 2,
		"_source": {
		  "console": [
			{
			  "name": "N64"
			}
		  ],
		  "players": [
			{
			  "name": "James Bond"
			}
		  ]
		}
	  }
	]

```

I'm awfully confused about how the scoring works. I've played around with the scoring types as seen in my ES query, but not sure how to make it so that negative hits are ranked lower. For instance, why would a game that matches 2 negatives and 2 positives give a score of 4, in the case of game `13325f86-6b89-11e8-bfea-1fe5e2b5a461`?

Then, if I wanted to boost a category, for instance `console`, I can't figure out how to do it with `terms`.

---

<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 15, 2018, 6:59pm UTC](https://discuss.elastic.co/t/confused-on-how-to-do-should-and-should-not-boosting/136220/2 "2018-07-15T18:59:04Z")

</div>

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