Query question using should and must

Ok, well that doesn't work because it starts excluding documents that don't have both matching. My real question is ultimately about sorting. I may have 25 documents with different categories and I still want to show all 25, however, I want those documents that contain both categories to score highest, then those docs with just 1 of the 2 categories score next highest, and then the rest of the docs really in any order.

For example, this query insists on ranking docs that don't contain any of the categories higher or with the same score as documents that just contain 1 of the categories.

"should": [
        {
          "match": {
            "category.keyword": "cat1"
          }
        },
        {
          "match": {
            "category.keyword": "cat3"
          }
        }
      ]

Here is a segment of the results I get back:

{
        "_index": "recommendation",
        "_type": "doc",
        "_id": "60e98770-c1b8-11e7-97b7-67350b465bf7",
        "_score": 7.0983133,
        "_source": {
          "allergens": [
            "cat1",
            "cat4",
            "cat5"
          ]
        }
      },
      {
        "_index": "recommendation",
        "_type": "doc",
        "_id": "3b8f97b0-c1bf-11e7-a56c-3d1dc97f87a0",
        "_score": 7.0610676,
        "_source": {
          "allergens": [
            "cat4",
            "cat5",
            "cat6"
          ]
        }
      },
      {
        "_index": "recommendation",
        "_type": "doc",
        "_id": "9f5cfe00-ba93-11e7-9f9a-8da6a185fd7a",
        "_score": 7.0610676,
        "_source": {
          "allergens": [
            "cat3"
          ]
        }
      },