From ccc5c59c5027e0d52f03e070eca979b1923d2282 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 15 Dec 2021 10:57:47 +0000 Subject: [PATCH] re-add fetching by url --- lib/pleroma/elasticsearch/store.ex | 1 + lib/pleroma/search/elasticsearch.ex | 34 ++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/elasticsearch/store.ex b/lib/pleroma/elasticsearch/store.ex index 5f2acd420..ffa6d4769 100644 --- a/lib/pleroma/elasticsearch/store.ex +++ b/lib/pleroma/elasticsearch/store.ex @@ -165,6 +165,7 @@ defmodule Pleroma.Elasticsearch 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) diff --git a/lib/pleroma/search/elasticsearch.ex b/lib/pleroma/search/elasticsearch.ex index eabd2a852..614a48bb9 100644 --- a/lib/pleroma/search/elasticsearch.ex +++ b/lib/pleroma/search/elasticsearch.ex @@ -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 @@ defmodule Pleroma.Search.Elasticsearch do terminate_after: 50, timeout: "5s", sort: [ - %{"_timestamp" => "desc"} + "_score", + %{_timestamp: %{order: "desc", format: "basic_date_time"}} ], query: %{ bool: %{ @@ -39,6 +42,9 @@ defmodule Pleroma.Search.Elasticsearch do size: 50, terminate_after: 50, timeout: "5s", + sort: [ + "_score" + ], query: %{ bool: %{ must: must @@ -58,6 +64,9 @@ defmodule Pleroma.Search.Elasticsearch do size: 50, terminate_after: 50, timeout: "5s", + sort: [ + "_score" + ], query: %{ bool: %{ must: Parsers.Hashtag.parse(query) @@ -67,6 +76,16 @@ defmodule Pleroma.Search.Elasticsearch 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 @@ defmodule Pleroma.Search.Elasticsearch do |> 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 @@ defmodule Pleroma.Search.Elasticsearch do 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" =>