Elasticsearch PHP add routing to child document

one text

Solution:

So here we are, after 2 more days of searching... But I have found the solution it seems...

After some more hours searching I ended up at this page (again): https://elastic.co/guide/en/elasticsearch/client/php-api/current/ElasticsearchPHP_Endpoints.html#Elasticsearch_Clientbulk_bulk

And there it was, in the params list of the bulk endpoint:

$params['routing']                =  // (string) Specific routing value

Not quite sure how to use this at first, but... Then I tried this for each of the child documents, which seems to be doing the trick!

$hosts = ['xxx.xxx.xxx.xxx:9200'];
$client = ClientBuilder::create()
    ->setHosts($hosts)
    ->build();

// insert price
$params['body'][] = [
    'index' => [
        '_index' => 'products_pc',
        '_id' => '123_1',
        'routing' => 123 // <-- Insert routing here.
    ]
];
$params['body'][] = [
    'webshop_id' => 1,
    'date_mod' => time(),
    'price' => 12,
    'url' => '',
    'product_price' => [
        'name' => 'price',
        'parent' => 123 // <-- Parent _id value
    ]
];

$client->bulk($params);

As thought before, too easy actually. But I guess that is the life of a programmer.

Please be aware though, a LOT of documentation is mentioning the _routing field (Even de official docs for version 7.9: https://www.elastic.co/guide/en/elasticsearch/reference/7.9/mapping-routing-field.html As seen in the text as in the right submenu under metadata fields) but the field is actually just "routing". Might save you a couple of days ;-)

Source