I just modified example from Elixir School.
iex> :ets.new(:user_lookup, [:set, :protected, :named_table])
:user_lookup
iex> :ets.insert(:user_lookup, {{"doomspork", YdoDb.Gaming.Player}, "Sean", ["Elixir", "Ruby", "Java"]})
true
iex> :ets.match(:user_lookup, {{:"$1", YdoDb.Gaming.Player}, :"$2", :"$3"})
[["doomspork", "Sean", ["Elixir", "Ruby", "Java"]]]
iex> :ets.insert(:user_lookup, {{"doomsday", YdoDb.Gaming.Player}, "Sean2", ["Elixir", "Ruby"]})
true
iex> :ets.insert(:user_lookup, {{"doomsday", YdoDb.Gaming.Game}, "Game", ["Elixir", "Ruby"]})
true
iex> :ets.match(:user_lookup, {{:"$1", YdoDb.Gaming.Player}, :"$2", :"$3"})
[["doomspork", "Sean", ["Elixir", "Ruby", "Java"]],
["doomsday", "Sean2", ["Elixir", "Ruby"]]]
iex> :ets.match(:user_lookup, {{:"$1", YdoDb.Gaming.Game}, :"$2", :"$3"})
[["doomsday", "Game", ["Elixir", "Ruby"]]]
As You can see, the first tuple element, is a tuple, which contains a structure.
On the match side, I filter with the structure, and retrieve 3 elements.
Is that what You are looking for?