SmartSerializer

edit

Serialize()

edit

The SmartSerializer inspects the data to be encoded. If the request body is provided as a string, it is passed directly to Elasticsearch as a string. This allows users to provide raw JSON, or raw strings for certain endpoints that dont have structure (such as the Analyze endpoint).

If the data is an array, it is converted to json. If the data provided was an empty array, the serializer manually converts the JSON from an empty array ([]) to an empty object ({}) so that it is valid JSON for Elasticsearch request bodies.

Deserialize()

edit

When decoding the response body, the SmartSerializer introspects the content_type headers to determine the appropriate encoding. If the data is encoded as JSON, it is decoded into an array using json_decode. Otherwise, it is returned as a string.

This functionality is required to cooperate with endpoints such as the Cat endpoints, which return tabular text instead of JSON.

Selecting the SmartSerializer

edit

The SmartSerializer is selected by default, but if you wish to manually configure it for explicitness, you can do so by using the setSerializer() method on the ClientBuilder object:

$client = ClientBuilder::create()
            ->setSerializer('\Elasticsearch\Serializers\SmartSerializer');
            ->build();

Note that the serializer is configured by specifying a namespace path to the serializer.