From c3a04166a0d93db56c054e203024c113958ecaeb Mon Sep 17 00:00:00 2001
From: Ekaterina Vaartis <vaartis@kotobank.ch>
Date: Tue, 17 Aug 2021 00:30:14 +0300
Subject: [PATCH] Tweak search ordering to hopefully return newer results

---
 lib/mix/tasks/pleroma/search/meilisearch.ex | 15 ++++++++++++---
 lib/pleroma/search/meilisearch.ex           | 13 +++++++++++--
 2 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/lib/mix/tasks/pleroma/search/meilisearch.ex b/lib/mix/tasks/pleroma/search/meilisearch.ex
index 2dd9c0a62..dcecbd7cf 100644
--- a/lib/mix/tasks/pleroma/search/meilisearch.ex
+++ b/lib/mix/tasks/pleroma/search/meilisearch.ex
@@ -39,7 +39,7 @@ defmodule Mix.Tasks.Pleroma.Search.Meilisearch do
               fragment("data->>'type' = 'Note'") and
                 fragment("LENGTH(data->>'source') > 0") and
                 fragment("data->'to' \\? ?", ^Pleroma.Constants.as_public()),
-            order_by: fragment("data->'published' DESC")
+            order_by: [desc: fragment("data->'published'")]
           ),
           timeout: :infinity
         )
@@ -66,11 +66,15 @@ defmodule Mix.Tasks.Pleroma.Search.Meilisearch do
           end)
         end)
         |> Stream.each(fn objects ->
-          {:ok, _} =
+          {:ok, result} =
             Pleroma.HTTP.post(
               "#{endpoint}/indexes/objects/documents",
               Jason.encode!(objects)
             )
+
+          if not Map.has_key?(Jason.decode!(result.body), "updateId") do
+            IO.puts("Failed to index: #{result}")
+          end
         end)
         |> Stream.run()
       end,
@@ -83,6 +87,11 @@ defmodule Mix.Tasks.Pleroma.Search.Meilisearch do
 
     endpoint = Pleroma.Config.get([Pleroma.Search.Meilisearch, :url])
 
-    {:ok, _} = Pleroma.HTTP.request(:delete, "#{endpoint}/indexes/objects/documents", "", [], [])
+    {:ok, result} =
+      Pleroma.HTTP.request(:delete, "#{endpoint}/indexes/objects/documents", "", [], [])
+
+    if not Map.has_key?(Jason.decode!(result.body), "updateId") do
+      IO.puts("Failed to clear: #{result}")
+    end
   end
 end
diff --git a/lib/pleroma/search/meilisearch.ex b/lib/pleroma/search/meilisearch.ex
index dbe6b2d67..9fdb0a07f 100644
--- a/lib/pleroma/search/meilisearch.ex
+++ b/lib/pleroma/search/meilisearch.ex
@@ -32,7 +32,7 @@ defmodule Pleroma.Search.Meilisearch do
       |> maybe_restrict_author(author)
       |> maybe_restrict_blocked(user)
       |> maybe_fetch(user, query)
-      |> order_by([activity], desc: activity.id)
+      |> order_by([object: obj], desc: obj.data["published"])
       |> Pleroma.Repo.all()
     rescue
       _ -> maybe_fetch([], user, query)
@@ -48,10 +48,19 @@ defmodule Pleroma.Search.Meilisearch do
 
       endpoint = Pleroma.Config.get([Pleroma.Search.Meilisearch, :url])
 
+      {:ok, published, _} = DateTime.from_iso8601(data["published"])
+
       {:ok, result} =
         Pleroma.HTTP.post(
           "#{endpoint}/indexes/objects/documents",
-          Jason.encode!([%{id: object.id, source: data["source"], ap: data["id"]}])
+          Jason.encode!([
+            %{
+              id: object.id,
+              source: data["source"],
+              ap: data["id"],
+              published: published |> DateTime.to_unix()
+            }
+          ])
         )
 
       if not Map.has_key?(Jason.decode!(result.body), "updateId") do