Replay search tools are not powerful enough

bump

I looked into it yesterday. It's neither simple nor straightforward with the way our api works internally and the different ratings that could affect a single game.

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
– Benno Rice

Is there no way simple way to alter a function to filter greater than min rating in game?

I've found the search tools to work pretty badly in general. Searching for a replay that includes more than one playername, for example, hasn't worked for me in ages. Search has also been very very slow for as long as I can remember.

"Design is an iterative process. The required number of iterations is one more than the number you have currently done. This is true at any point in time."

See all my projects:

SQL database are not build for flexible queries on 1:n data (1 game n players).

It's also not designed to run fuzzy text search (a map or mod name where i don't know exactly where whitespace and apostrophes are).

But: most software can't. Look at this forum: it's running on a document oriented db but it has the same search limitations.

Most of the smaller applications in the world behave like that.

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
– Benno Rice

Search for people that only play 2k+ avg, thats the easiest solution i found

And you can search by game name, look for games with things in the title like "2k+" "2000+" "1.9k" etc.

Is the replay database schema published somewhere? The search function is pretty limited, but I can write my own SQL search filter. I have no idea what the available fields are. I'd need the table layouts.

Nvm, I found it!
https://faforever.github.io/db/relationships.html
Hopefully, this is up to date.
Not sure I can do a table join in the client. I need to figure out how to run an arbitrary query so I can play around with it.

For the OP's problem, searching for high-rated players is about the best you can really do.
There probably are not many 4v4 games where everyone is 2000+. There just aren't many players at that level.

@PViddy The problem can never be solved with a SQL join.

What happens in the API is this: perform the join, then filter.

So first you join a game and get a result like:

game player rating
1 A 1900
1 B 1900
1 C 1900
1 D 2100
2 A 1900
2 B 1900
2 C 1900
2 D 1800
3 A 2200
3 B 2100
3 C 2200
3 D 2000

And now you filter rating>=2000 on all records of that table. So the result would be this:

game player rating
1 D 2100
3 A 2200
3 B 2100
3 C 2200
3 D 2000

It's easy to find a game where on participant matches a criterium.
But there is no row-based filter in SQL that could require all players to be >=2k.
For that you need either SQL subselects (which is not supported by our API logic for technical reasons) or we calculate somehting like min/max/mean rating during fetching the game in the API.

The latter is generally possible, but not so simple with our API logic, because a game participant has potentially multiple leaderboards, so it need to return these KPIs per leaderboard (even though in practice each game right now has only one leaderboard).

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
– Benno Rice