forked from AkkomaGang/akkoma
re-add fetching by url
This commit is contained in:
parent
d1bb10c88e
commit
ccc5c59c50
2 changed files with 34 additions and 1 deletions
|
@ -165,6 +165,7 @@ def search(:activities, q) do
|
|||
results
|
||||
|> Enum.map(fn result -> result["_id"] end)
|
||||
|> Pleroma.Activity.all_by_ids_with_object()
|
||||
|> Enum.sort(&(&1.inserted_at >= &2.inserted_at))
|
||||
else
|
||||
e ->
|
||||
Logger.error(e)
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
defmodule Pleroma.Search.Elasticsearch do
|
||||
@behaviour Pleroma.Search
|
||||
|
||||
alias Pleroma.Activity
|
||||
alias Pleroma.Object.Fetcher
|
||||
alias Pleroma.Web.MastodonAPI.StatusView
|
||||
alias Pleroma.Web.MastodonAPI.AccountView
|
||||
alias Pleroma.Web.ActivityPub.Visibility
|
||||
|
@ -18,7 +20,8 @@ def es_query(:activity, query) do
|
|||
terminate_after: 50,
|
||||
timeout: "5s",
|
||||
sort: [
|
||||
%{"_timestamp" => "desc"}
|
||||
"_score",
|
||||
%{_timestamp: %{order: "desc", format: "basic_date_time"}}
|
||||
],
|
||||
query: %{
|
||||
bool: %{
|
||||
|
@ -39,6 +42,9 @@ def es_query(:user, query) do
|
|||
size: 50,
|
||||
terminate_after: 50,
|
||||
timeout: "5s",
|
||||
sort: [
|
||||
"_score"
|
||||
],
|
||||
query: %{
|
||||
bool: %{
|
||||
must: must
|
||||
|
@ -58,6 +64,9 @@ def es_query(:hashtag, query) do
|
|||
size: 50,
|
||||
terminate_after: 50,
|
||||
timeout: "5s",
|
||||
sort: [
|
||||
"_score"
|
||||
],
|
||||
query: %{
|
||||
bool: %{
|
||||
must: Parsers.Hashtag.parse(query)
|
||||
|
@ -67,6 +76,16 @@ def es_query(:hashtag, query) do
|
|||
end
|
||||
end
|
||||
|
||||
defp maybe_fetch(:activity, search_query) do
|
||||
with true <- Regex.match?(~r/https?:/, search_query),
|
||||
{:ok, object} <- Fetcher.fetch_object_from_id(search_query),
|
||||
%Activity{} = activity <- Activity.get_create_by_object_ap_id(object.data["id"]) do
|
||||
activity
|
||||
else
|
||||
_ -> nil
|
||||
end
|
||||
end
|
||||
|
||||
@impl Pleroma.Search
|
||||
def search(%{assigns: %{user: user}} = _conn, %{q: query} = _params, _options) do
|
||||
parsed_query =
|
||||
|
@ -74,6 +93,11 @@ def search(%{assigns: %{user: user}} = _conn, %{q: query} = _params, _options) d
|
|||
|> String.trim()
|
||||
|> SearchParser.parse!()
|
||||
|
||||
activity_fetch_task =
|
||||
Task.async(fn ->
|
||||
maybe_fetch(:activity, String.trim(query))
|
||||
end)
|
||||
|
||||
activity_task =
|
||||
Task.async(fn ->
|
||||
q = es_query(:activity, parsed_query)
|
||||
|
@ -100,6 +124,14 @@ def search(%{assigns: %{user: user}} = _conn, %{q: query} = _params, _options) d
|
|||
activity_results = Task.await(activity_task)
|
||||
user_results = Task.await(user_task)
|
||||
hashtag_results = Task.await(hashtag_task)
|
||||
direct_activity = Task.await(activity_fetch_task)
|
||||
|
||||
activity_results =
|
||||
if direct_activity == nil do
|
||||
activity_results
|
||||
else
|
||||
[direct_activity | activity_results]
|
||||
end
|
||||
|
||||
%{
|
||||
"accounts" =>
|
||||
|
|
Loading…
Reference in a new issue