I am running Typesense server, which works fine. However, it hangs when I try to use sort_by
parameter on int
or bool
fields. When I use field of type string
, it instantly returns sorted results.
Any idea why would Typesense hang on int
or bool
fields ? There is nothing in log output.
Thank you for any help or hints.
EDIT: set-up I am using:
$productSchema = [ 'name' => 'products', 'fields' => [
['name' => 'name', 'type' => 'string', 'sort' => true],
['name' => 'seo_url', 'type' => 'string'],
['name' => 'short_description', 'type' => 'string'],
['name' => 'long_description', 'type' => 'string'],
['name' => 'product_number', 'type' => 'string'],
['name' => 'attributes', 'type' => 'string'],
['name' => 'on_stock', 'type' => 'bool', 'optional' => true, 'index' => false, 'sort' => true],
['name' => 'last_purchase', 'type' => 'int32', 'optional' => true, 'index' => false, 'sort' => true],
['name' => 'attributes_ids', 'type' => 'int32[]', 'index' => false, 'optional' => true],
['name' => 'category', 'type' => 'string'],
['name' => 'category_ids', 'type' => 'int32[]', 'index' => false, 'optional' => true],
['name' => 'image_url', 'type' => 'string', 'index' => false, 'optional' => true],
['name' => 'price_vat', 'type' => 'float', 'index' => false, 'optional' => true, 'sort' => true] ] ];
And search query:
curl -H "X-TYPESENSE-API-KEY: key" "http://localhost:8108/collections/products/documents/search?q=jednoro&query_by=name&sort_by=price_vat:asc"
And here is example of indexed documents.
{"facet_counts":[],"found":66,"hits":[{"document":{"attributes":"Jednorožec, bavlna / elastan, Žlutá, Růžová, Zelená, Holčičí vzor","attributes_ids":[71,3,13,15,18,32],"category":"Potisk úplety","category_ids":[8],"id":"3726","image_url":"https://example.com/foto/51/8173X250X233~dxndYq.jpg","last_purchase":1573686000,"long_description":"<p>Úplet s pohádkovými jednorožci na úžasném duhovém podkladu volá po ušití šatů pro malé princezny. Pořiďte své holčičce originální kousek do šatníku, bude nadšená! A vy s ní.:-)</p>\r\n<p>Úplet je pružný ve směru osnovy i útku, vhodný na každodenní nošení.</p>\r\n<p><strong>Karmelie doporučuje na šití:</strong> Vhodný na výrobu triček, trik s dlouhým rukávem, šatiček, sukýnek. Využít jej můžete i na legíny. Dopřejte vaší mysli popustit uzdu své fantazie!</p>\r\n<p>NEZAPOMEŇTE: Úplet před šitím vysrážet.<br /><br />Ostatní: barvy nemusí plně odpovídat skutečnosti, odchylky jsou způsobeny nesprávnou kalibrací monitoru.</p>\r\n<p> </p>","name":"Úplet barevní jednorožci na duhovém podkladu","on_stock":false,"price_vat":335,"product_number":"UPS009","reserved_amount":"0.00","seo_url":"uplet-barevni-jednorozci-na-duhovem-podkladu","short_description":"Šířka: 150–155 cm Gramáž: 210 - 215 g/m² Složení: 95% bavlna, 5% elastan. Certifikát pro děti do 3 let.","warehouse_amount":"0.00"},"highlights":[{"field":"name","matched_tokens":["jednoro"],"snippet":"Úplet barevní <mark>jednoro</mark>žci na duhovém podkladu"}],"text_match":72341261125681153},{"document":{"attributes":"Jednorožec, Červená, Holčičí vzor, bavlna / elastan","attributes_ids":[71,16,32,3],"category":"Potisk úplety","category_ids":[8],"id":"3210","image_url":"https://example.com/foto/66/30769X250X233~cHZGNa.jpeg","last_purchase":1568757600,"long_description":"<p><strong>Karmelie doporučuje na šití: </strong></p>\r\n<p>Nejraději z něj švadlenky šijí trička. Dále se hodí na trika s dlouhým rukávem, tuniky. Využít ho lze i na aplikaci. Ideální do kombinace k jednobarevným úpletům v barvě podkladu či vzoru, panelům.Podle vkusu také k ostatním designovým úpletům z naší nabídky.</p>\r\n<p>NEZAPOMEŇTE:<br />Úplet před šitím vysrážet.</p>\r\n<p>Ostatní: barvy nemusí plně odpovídat skutečnosti, odchylky jsou způsobeny nesprávnou kalibrací monitoru.</p>\r\n<p> </p>","name":"Úplet potisk digitální jednorožci na bordó","on_stock":true,"price_vat":310,"product_number":"UPS001","reserved_amount":"0.00","seo_url":"uplet-potisk-digitalni-jednorozci-na-bordo","short_description":"Šířka: 150 cm. Gramáž: 210 g/m². Složení: 95% bavlna, 5% elastan. Certifikát pro děti do 3 let.","warehouse_amount":"6.30"},"highlights":[{"field":"name","matched_tokens":["jednoro"],"snippet":"Úplet potisk digitální <mark>jednoro</mark>žci na bordó"}],"text_match":72341261125681153},{"document":{"attributes":"Jednorožec, Černá, Holčičí vzor, bavlna / elastan","attributes_ids":[71,20,32,3],"category":"Potisk úplety","category_ids":[8],"id":"7981","image_url":"https://example.com/foto/20/24067X250X233~e1IF84.jpg","last_purchase":1619215200,"long_description":"<div class=\"specs-row\">Jednorožci se mezi holčičkami těší oblibě už hodně roků, proto se s nimi ponořte do kouzelného světa plného těchto bájných tvorů.:-) </div>\r\n<div class=\"specs-row\"> </div>\r\n<div class=\"specs-row\"><strong>Karmelie doporučuje na šití: </strong></div>\r\n<p>Vhodný na výrobu triček, trik s dlouhým rukávem, sukýnek, šatiček a dalšího oblečení. Využít jej můžete i na jarní čepice, tunely a šátkošály. Skvěle se bude hodit jako doplňující materiál k mikině na kapsy, nebo vnitřní část kapuce.:-)</p>\r\n<p>Rada pro začátečníka:<br />Při šití úpletů si nandejte do stroje jehlu JERSEY, která je určena pro šití pružných látek. Tyto jehly jsou určené pro úplety a mají zakulacenou špičku. Nepoškodí tak očka pleteniny a snadno vklouzne mezi ně. U použití obyčejné jehly hrozí narušení úpletu, což by vedlo s každým praním a nošením ke zvětšující se dírce.</p>\r\n<p>NEZAPOMEŇTE:<br />Úplet před praním vysrážet.</p>\r\n<p>Ostatní: barvy nemusí plně odpovídat skutečnosti, odchylky jsou způsobeny nesprávnou kalibrací monitoru.</p>","name":"Úplet potisk jednorožci mezi lístečky na černé","on_stock":true,"price_vat":315,"product_number":"UPS207","reserved_amount":"0.00","seo_url":"uplet-potisk-jednorozci-mezi-listecky-na-cerne","short_description":"Šířka: 160 cm Gramáž: 200 g/m² Složení: 95% bavlna, 5% elastan. Certifikát pro děti do 3 let.","warehouse_amount":"22.10"},"highlights":[{"field":"name","matched_tokens":["jednoro"],"snippet":"Úplet potisk <mark>jednoro</mark>žci mezi lístečky na černé"}],"text_match":72341261125681153},{"document":{"attributes":"Jednorožec, Fialová, Holčičí vzor, bavlna / elastan","attributes_ids":[71,21,32,3],"category":"Potisk úplety","category_ids":[8],"id":"7982","image_url":"https://example.com/foto/38/24068X250X233~9huTQ.jpg","last_purchase":1619215200,"long_description":"<div class=\"specs-row\">Jednorožci se mezi holčičkami těší oblibě už hodně roků, proto se s nimi ponořte do kouzelného světa plného těchto bájných tvorů.:-) </div>\r\n<div class=\"specs-row\"> </div>\r\n<div class=\"specs-row\"><strong>Karmelie doporučuje na šití: </strong></div>\r\n<p>Vhodný na výrobu triček, trik s dlouhým rukávem, sukýnek, šatiček a dalšího oblečení. Využít jej můžete i na jarní čepice, tunely a šátkošály. Skvěle se bude hodit jako doplňující materiál k mikině na kapsy, nebo vnitřní část kapuce.:-)</p>\r\n<p>Rada pro začátečníka:<br />Při šití úpletů si nandejte do stroje jehlu JERSEY, která je určena pro šití pružných látek. Tyto jehly jsou určené pro úplety a mají zakulacenou špičku. Nepoškodí tak očka pleteniny a snadno vklouzne mezi ně. U použití obyčejné jehly hrozí narušení úpletu, což by vedlo s každým praním a nošením ke zvětšující se dírce.</p>\r\n<p>NEZAPOMEŇTE:<br />Úplet před praním vysrážet.</p>\r\n<p>Ostatní: barvy nemusí plně odpovídat skutečnosti, odchylky jsou způsobeny nesprávnou kalibrací monitoru.</p>","name":"Úplet potisk jednorožci mezi lístečky na fialové","on_stock":true,"price_vat":315,"product_number":"UPS208","reserved_amount":"0.00","seo_url":"uplet-potisk-jednorozci-mezi-listecky-na-fialove","short_description":"Šířka: 160 cm Gramáž: 200 g/m² Složení: 95% bavlna, 5% elastan. Certifikát pro děti do 3 let.","warehouse_amount":"18.40"},"highlights":[{"field":"name","matched_tokens":["jednoro"],"snippet":"Úplet potisk <mark>jednoro</mark>žci mezi lístečky na fialové"}],"text_match":72341261125681153}}
price_vat
is set to 'index' => false
in the schema, so it can't be used for sorting - only indexed fields can be used for sorting / filtering / searching. So if you change price_vat
to 'index' => true
this should work as expected.
Side note: There is a missing validation in Typesense which is causing it to hang instead of reporting an error in this case. There's now an open issue to fix this in an upcoming RC.