SphinxQL を使用して、フィルター条件が関連付けられている JSON MVA プロパティで結果を並べ替えたいと思います。
たとえば、次を含むインデックスがあります。
event_id,
tickets
ここで、チケットは次のような JSON 配列です。
[{"type":"Child","price":10.00},
{"type":"Adult","price":20.00},
...
{"type":"VIP" ,"price":50.00}
]
JSON 配列のエントリは価格で並べ替えられているため、フィルター処理されたデータを次のように昇順で並べ替えることができます。
SELECT event_id,
tickets,
tickets[INDEXOF(any(t.price >= 20.00 and
t.price <= 30.00
for t in tickets)
)
].price * 1.0 as from_price,
any(t.price >= 20.00 and
t.price <= 30.00
for t in tickets) as found_price_range
FROM <index_name>
WHERE found_price_range = 1
ORDER BY from_price ASC
しかし、どうすれば降順でソートできますか? 要求された価格範囲内で最大の ticket.price 要素を引き出す必要がありますが、SphinxQL でそれを行う方法がわかりません。ticket[LENGTH(tickets)-1].price を指定すると、イベントで最大のチケット価格が得られますが、価格帯フィルターは考慮されません。
外部のページネーション ツールが適切に機能する機能を維持するために、ソリューションは純粋な SphinxQL である必要があります。