書き換えているのは、グローバル側のリレーで kind:1984 + authors + 複数 #p の REQ が特に重く、EOSE まで数十秒かかるものが出ているもの。
重たい原因は strfry のインデックススキャンとの相性で、strfry はインデックスから候補を拾う構造なので、kind:1 だと #p で拾った候補がそのままヒットしやすい(密度が高い)。
一方 kind:1984 は #p で広く候補を拾ったあと authors/kind 条件でほとんど落ち、残る event がほぼゼロになるケースがある。大量に読んでほぼ全部捨てる形なため。
そこで前段の nostr-filter で、低密度なスキャンになりそうな REQ だけ形を変えて upstream の strfry に投げるように書き換えてる。
kind:1984 に複数 #p が付いているものは #p/#e を外して kind:[1984] だけの条件の REQ にしてから strfry に投げる。その後、返ってきた event リストを元の条件に照らしてフィルタし直してから返却する感じに。
正しさの担保として、一定割合で元の REQ と書き換え後の REQ を並行投げして event ID 集合を比較していて、今のところ差異は出ずに正常処理されているのを確認してます。
