Add a search backend behaviour
authorEkaterina Vaartis <vaartis@kotobank.ch>
Mon, 20 Dec 2021 19:38:50 +0000 (22:38 +0300)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Wed, 29 Jun 2022 19:49:45 +0000 (20:49 +0100)
lib/pleroma/search/database_search.ex
lib/pleroma/search/meilisearch.ex
lib/pleroma/search/search_backend.ex [new file with mode: 0644]

index 5a8b8ca67b9d1e4eeb49f52b12e12b1e9a6d28d3..3735a5fab427f87652d6d203da55ee866facc399 100644 (file)
@@ -13,6 +13,8 @@ defmodule Pleroma.Search.DatabaseSearch do
 
   import Ecto.Query
 
+  @behaviour Pleroma.Search.SearchBackend
+
   def search(user, search_query, options \\ []) do
     index_type = if Pleroma.Config.get([:database, :rum_enabled]), do: :rum, else: :gin
     limit = Enum.min([Keyword.get(options, :limit), 40])
@@ -45,7 +47,10 @@ defmodule Pleroma.Search.DatabaseSearch do
     end
   end
 
+  @impl true
   def add_to_index(_activity), do: nil
+
+  @impl true
   def remove_from_index(_object), do: nil
 
   def maybe_restrict_author(query, %User{} = author) do
index 21b44de86673ed1c881b2979cad559c7e52fc5a7..33bbf8392cb5eae3e28fcb706e4b078c83f50328 100644 (file)
@@ -7,6 +7,8 @@ defmodule Pleroma.Search.Meilisearch do
   import Pleroma.Search.DatabaseSearch
   import Ecto.Query
 
+  @behaviour Pleroma.Search.SearchBackend
+
   defp meili_headers do
     private_key = Pleroma.Config.get([Pleroma.Search.Meilisearch, :private_key])
 
@@ -139,6 +141,7 @@ defmodule Pleroma.Search.Meilisearch do
     end
   end
 
+  @impl true
   def add_to_index(activity) do
     maybe_search_data = object_to_search_data(activity.object)
 
@@ -159,6 +162,7 @@ defmodule Pleroma.Search.Meilisearch do
     end
   end
 
+  @impl true
   def remove_from_index(object) do
     meili_delete!("/indexes/objects/documents/#{object.id}")
   end
diff --git a/lib/pleroma/search/search_backend.ex b/lib/pleroma/search/search_backend.ex
new file mode 100644 (file)
index 0000000..ed6bfd3
--- /dev/null
@@ -0,0 +1,17 @@
+defmodule Pleroma.Search.SearchBackend do
+  @doc """
+  Add the object associated with the activity to the search index.
+
+  The whole activity is passed, to allow filtering on things such as scope.
+  """
+  @callback add_to_index(activity :: Pleroma.Activity.t()) :: nil
+
+  @doc """
+  Remove the object from the index.
+
+  Just the object, as opposed to the whole activity, is passed, since the object
+  is what contains the actual content and there is no need for fitlering when removing
+  from index.
+  """
+  @callback remove_from_index(object :: Pleroma.Object.t()) :: nil
+end