sphinx, like classic sql databases, works with a so-called fixed schema, that is, a set of predefined attribute columns. these work well when most of the data stored actually has values: mapping sparse data to static columns can be cumbersome. assume for example that you’re running a price comparison or an auction site with many different products categories. some of the attributes like the price or the vendor are identical across all goods. but from there, for laptops, you also need to store the weight, screen size, hdd type, ram size, etc. and, say, for shovels, you probably want to store the color, the handle length, and so on. so it’s manageable across a single category, but all the distinct fields that you need for all the goods across all the categories are legion. the json field can be used to overcome this. inside the json attribute you don’t need a fixed structure. you can have various keys which may or may not be present in all documents. when you try to filter on one of these keys, sphinx will ignore documents that don’t have the key in the json attribute and will work only with those documents that have it.