54 lines
985 B
Elixir
54 lines
985 B
Elixir
defmodule Pleroma.Search.Elasticsearch.Parsers.User do
|
|
defp to_es(term) when is_binary(term) do
|
|
%{
|
|
bool: %{
|
|
minimum_should_match: 1,
|
|
should: [
|
|
%{
|
|
match: %{
|
|
bio: %{
|
|
query: term,
|
|
operator: "AND"
|
|
}
|
|
}
|
|
},
|
|
%{
|
|
term: %{
|
|
nickname: %{
|
|
value: term
|
|
}
|
|
}
|
|
},
|
|
%{
|
|
match: %{
|
|
display_name: %{
|
|
query: term,
|
|
operator: "AND"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
end
|
|
|
|
defp to_es({:quoted, term}), do: to_es(term)
|
|
|
|
defp to_es({:filter, ["user", query]}) do
|
|
%{
|
|
term: %{
|
|
nickname: %{
|
|
value: query
|
|
}
|
|
}
|
|
}
|
|
end
|
|
|
|
defp to_es({:filter, _}), do: nil
|
|
|
|
def parse(q) do
|
|
Enum.map(q, &to_es/1)
|
|
|> Enum.filter(fn x -> x != nil end)
|
|
end
|
|
end
|