Add logging to milisiearch index and make it use desc(id)
authorEkaterina Vaartis <vaartis@kotobank.ch>
Mon, 16 Aug 2021 07:18:01 +0000 (10:18 +0300)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Wed, 29 Jun 2022 19:48:29 +0000 (20:48 +0100)
lib/mix/tasks/pleroma/search/meilisearch.ex

index 2af8e58532c5bf47452ce77fa558609ad38e3c21..1fece96e5ea602de24f229cfa31d1d2f8adbc2a9 100644 (file)
@@ -3,8 +3,9 @@
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Mix.Tasks.Pleroma.Search.Meilisearch do
-  import Mix.Pleroma
+  require Logger
 
+  import Mix.Pleroma
   import Ecto.Query
 
   def run(["index"]) do
@@ -12,12 +13,25 @@ defmodule Mix.Tasks.Pleroma.Search.Meilisearch do
 
     endpoint = Pleroma.Config.get([Pleroma.Search.Meilisearch, :url])
 
+    {:ok, _} =
+      Pleroma.HTTP.post(
+        "#{endpoint}/indexes/objects/settings/ranking-rules",
+        Jason.encode!([
+          "desc(id)",
+          "typo",
+          "words",
+          "proximity",
+          "attribute",
+          "wordsPosition",
+          "exactness"
+        ])
+      )
+
     Pleroma.Repo.chunk_stream(
       from(Pleroma.Object,
-        limit: 200,
         where: fragment("data->>'type' = 'Note'") and fragment("LENGTH(data->>'source') > 0")
       ),
-      100,
+      200,
       :batches
     )
     |> Stream.map(fn objects ->
@@ -26,12 +40,14 @@ defmodule Mix.Tasks.Pleroma.Search.Meilisearch do
         %{id: object.id, source: data["source"], ap: data["id"]}
       end)
     end)
-    |> Stream.each(fn activities ->
+    |> Stream.each(fn objects ->
       {:ok, _} =
         Pleroma.HTTP.post(
           "#{endpoint}/indexes/objects/documents",
-          Jason.encode!(activities)
+          Jason.encode!(objects)
         )
+
+      IO.puts("Indexed #{Enum.count(objects)} entries")
     end)
     |> Stream.run()
   end