A product catalog allows you to define product prices and stock levels. When a product is retrieved using the APIs, the catalog id is passed to the API call and the returned product contains the prices and quantities defined by the catalog. If a catalog is used to define product prices and / or product quantities but an entry in the catalog doesn't exist for a product, then that product will never be returned by the API calls. This is a powerful feature that allows you to define which subset of products are available for a catalog.
When using catalogs to limit the products available, it becomes important for the suggested spelling and suggested search features to only return suggestions for products defined within the catalog. In order to configure this, the steps are as follows:
In the Admin App, under Configuration >> Solr Search Engine, you must set "Add suggested search for catalog" and "Add spelling suggestions for catalog" to true. The default value is false. "Catalogs used for product prices" must be set to true is you are using catalogs for prices and likewise "Catalogs used for product quantities" must be set to true if you are using them for stock levels.
Once the configuration variables have been set up correctly, the products must be re-indexed in Solr. The re-indexing ensures that suggestion lists are created for all catalog / language combinations for your store.
An extra step for suggested spelling is to add a new section in the file KonaKart/solr/server/solr/configsets/konakart/conf/solrconfig.xml for each store / catalog / language combination. You'll see an example entry for store "store1", catalog "cat1" and language "en". The name of the request handler must follow the convention "spell_storeId_catalogId_languageCode" (e.g. spell_store1_cat1_en) since the KonaKart engine will dynamically create this string in order to call the correct request handler depending on the store, catalog and language currently being used.
Finally when calling the getSuggestedSpellingItems() or the getSuggestedSearchItems() API calls, the catalogId must be set in the Options object passed in as a parameter.